Monday, September 23, 2013

文章 25篇 阅读 6125 算法系列


#include <stdio.h> #include <malloc.h> #define VERTEXNUM 5 void createGraph(int (*edge)[VERTEXNUM], int start, int end); void displayGraph(int (*edge)[VERTEXNUM]); void DFT(int (*edge)[VERTEXNUM],int* vertexStatusArr); void DFTcore(int (*edge)[VERTEXNUM],int i,int* vertexStatusArr); int main(void){ //动态创建存放边的二维数组 int (*edge)[VERTEXNUM] sayville ny = (int (*)[VERTEXNUM])malloc(sizeof(int)*VERTEXNUM*VERTEXNUM); int i,j; for(i=0;i<VERTEXNUM;i++){ for(j=0;j<VERTEXNUM;j++){ edge[i][j] = 0; } } //存放顶点的遍历状态 0 未遍历 1 已遍历 int* vertexStatusArr = (int*)malloc(sizeof(int)*VERTEXNUM); for(i=0;i<VERTEXNUM;i++){ vertexStatusArr[i] = 0; } printf("after init:\n"); displayGraph(edge); sayville ny //创建图 createGraph(edge,0,3); sayville ny createGraph(edge,0,4); createGraph(edge,3,1); createGraph(edge,3,2); createGraph(edge,4,1); printf("after create:\n"); displayGraph(edge); //深度优先遍历 DFT(edge,vertexStatusArr); free(edge); return 0; } //创建图 void createGraph(int (*edge)[VERTEXNUM], int start, int end){ edge[start][end] sayville ny = 1; } //打印存储的图 void displayGraph(int (*edge)[VERTEXNUM]){ int i,j; for(i=0;i<VERTEXNUM;i++){ for(j=0;j<VERTEXNUM;j++){ printf("%d ",edge[i][j]); } printf("\n"); } } //深度优先遍历 void DFT(int (*edge)[VERTEXNUM], int* vertexStatusArr){ printf("start BFT graph:\n"); int i; for(i=0;i<VERTEXNUM;i++){ DFTcore(edge,i,vertexStatusArr); } printf("\n"); } void DFTcore(int (*edge)[VERTEXNUM],int i,int* vertexStatusArr){ if(vertexStatusArr[i] == 1){ return; } printf("%d ",i); vertexStatusArr[i] = 1; int j; for(j=0;j<VERTEXNUM;j++){ if(edge[i][j] == 1){ DFTcore(edge, j, vertexStatusArr); } } }
#include <stdio.h> #include <malloc.h> #define VERTEXNUM 5 //存放顶点的邻接表元素 typedef sayville ny struct edge{ int vertex; struct edge* next; }st_edge; void createGraph(st_edge** edge, int start, int end); void displayGraph(st_edge** edge); void delGraph(st_edge** edge); void DFT(st_edge** edge,int* vertexStatusArr); void DFTcore(st_edge** edge,int i,int* vertexStatusArr); sayville ny int main(void){ //动态创建存放边的指针数组 st_edge** edge = (st_edge**)malloc(sizeof(st_edge*)*VERTEXNUM); int i; for(i=0;i<VERTEXNUM;i++){ edge[i] = NULL; } //存放顶点的遍历状态 0 未遍历 1 已遍历 int* vertexStatusArr = (int*)malloc(sizeof(int)*VERTEXNUM); for(i=0;i<VERTEXNUM;i++){ vertexStatusArr[i] = 0; } printf("after init:\n"); displayGraph(edge); //创建图 createGraph(edge,0,3); createGraph(edge,0,4); createGraph(edge,3,1); createGraph(edge,3,2); createGraph(edge,4,1); printf("after create:\n"); displayGraph(edge); //深度优先遍历 DFT(edge,vertexStatusArr); //释放邻接表占用的内存 delGraph(edge); edge = NULL; free(vertexStatusArr); vertexStatusArr = NULL; return 0; } //创建图 void createGraph(st_edge** edge, int start, int end){ st_edge* newedge = (st_edge*)malloc(sizeof(st_edge)); newedge->vertex = end; newedge->next = NULL; edge = edge + start; while(*edge != NULL){ edge = &((*edge)->next); } *edge = newedge; } //打印存储的图 void displayGraph(st_edge** edge){ int i; st_edge* p; for(i=0;i<VERTEXNUM;i++){ printf("%d:",i); p = *(edge+i); while(p != NULL){ printf("%d ",p->vertex); p = p->next; } printf("\n"); } } //释放邻接表占用的内存 void delGraph(st_edge** edge){ int i; st_edge* p; st_edge* del; for(i=0;i<VERTEXNUM;i++){ p = *(edge+i); while(p != NULL){ del = p; p = p->next; free(del); } edge[i] = NULL; } free(edge); } //深度优先遍历 void DFT(st_edge** edge,int* vertexStatusArr){ printf("start BFT graph:\n"); int i; for(i=0;i<VERTEXNUM;i++){ DFTcore(edge,i,vertexStatusArr); } printf("\n"); } void DFTcore(st_edge** edge,int i,int* vertexStatusArr){ sayville ny if(vertexStatusArr[i] == 1){ return; } printf("%d ",i); vertexStatusArr[i] = 1; st_edge* p = *(edge+i); while(p != NULL){ DFTcore(edge, p->vertex, vertexStatusArr); p = p->next; } }
文章 25篇 阅读 6125 算法系列
文章分类 UNIX环境高级编程 笔记 (13) 数据通信与网络 笔记 (25) c专家编程 笔记 (12) c陷阱与缺陷 笔记 (8) c和指针 笔记 (20) glibc manual sayville ny (2) linux管理 (49) linux安全 (0) 网络 (1) C语言相关 (39) 算法 (23) shell脚本 (4) java语言相关 (6) javascript (1) EXCEL (1)
2013年09月 (12) 2013年08月 (18) 2013年07月 (20) 2013年06月 (21) 2013年05月 (14) 2013年04月 (18) 2013年03月 (11) 2013年02月 (2) 2013年01月 (6) 2012年12月 (12) 2012年11月 (3) 2012年10月 (3) 2012年09月 (2) 2012年08月 (12) 2012年07月 sayville ny (5) 2012年06月 (5) 2012年04月 (3) 2012年03月 sayville ny (3) 2011年10月 (1) 2011年09月 (3) 2011年08月 (6) 2011年07月 (5) 2011年06月 (14)
阅读排行 svn diff 与 patch (3080) centos-6.2安装完后没有eth0网卡 无法设置ip的解决方法 (2069) 通过PID获取进程名 (1281) GCC编译提示显示乱码 (1210) 修改用户名和用户组名 (1190) od命令 (1184) 1752年9月奇怪的日历 (1181) 大端小端 Big- Endian和Little-Endian (975) c语言版replaceAll方法 (951) 查找之二叉树查找 (904)
评论排行 c专家编程 笔记--如何使用赋值语句拷贝整个数组的值 (17) 排序之bitmap排序 (5) 排序之冒泡排序 (4) c语言版replaceAll方法 (4) GCC编译提示显示乱码 (4) c专家编程 笔记--bus error(总线错误) (4) c和指针 笔记--宏插入到字符串常量 (3) 数据通信与网络 笔记--对数据链路层的一点疑问 (2) typedef struct的问题 (2) 查找之二叉树查找 (2)


No comments:

Post a Comment