1.前言
期末复习算法,第三章讲到了图,所以想将课本中的算法实现。当写完代码的时候才发现这样的复习效率太低了,看书复习是复习,写代码是写代码。不过写完以后还是有点成就感的。
2.参考文献
http://blog.csdn.net/lengyuhong/archive/2010/01/06/5145100.aspx
3.代码实现
- #include<iostream>
- #include<malloc.h>
- using namespace std;
-
- #define maxNum 100 //定义邻接举证的最大定点数
- int visited[maxNum];
-
-
- typedef struct
- {
- char v[maxNum];
- int e[maxNum][maxNum];
- int vNum;
- int eNum;
- }graph;
-
- void createGraph(graph *g);
- void DFS(graph *g);
-
- void dfs(graph *g,int i)
- {
-
- cout<<"顶点"<<i<<"已经被访问"<<endl;
- visited[i]=1;
- for(int j=0;j<g->vNum;j++)
- {
- if(g->e[i][j]!=0&&visited[j]==0)
- dfs(g,j);
- }
- }
-
- void DFS(graph *g)
- {
- int i;
-
- for(i=0;i<g->vNum;i++)
- visited[i]=0;
-
- for(i=0;i<g->vNum;i++)
- if(visited[i]==0)
- dfs(g,i);
- }
-
- void createGraph(graph *g)
- {
- cout<<"正在创建无向图..."<<endl;
- cout<<"请输入顶点个数vNum:";
- cin>>g->vNum;
- cout<<"请输入边的个数eNum:";
- cin>>g->eNum;
- int i,j;
-
-
-
-
-
-
-
- for(i=0;i<g->vNum;i++)
- for(j=0;j<g->vNum;j++)
- g->e[i][j]=0;
-
-
- cout<<"请输入边的头和尾"<<endl;
- for(int k=0;k<g->eNum;k++)
- {
- cin>>i>>j;
- g->e[i][j]=1;
- g->e[j][i]=1;
- }
- }
-
- int main()
- {
- graph *g;
- g=(graph*)malloc(sizeof(graph));
- createGraph(g);
- DFS(g);
- int i;
- cin>>i;
- return 0;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/06/11/2297009.html,如需转载请自行联系原作者