赞
踩
图的深度优先搜索可以用来解决很多问题,例如可以用于产生图的生成树。程序代码在VC++6.0和Dev-C++下编译通过。
算法的输入和输出为:
- #include "stdio.h"
- #include "stdlib.h"
-
- #define MAX_VERTEX_NUM 100
-
- typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
- typedef struct { // 图的定义
- char vexs[MAX_VERTEX_NUM];
- AdjMatrix arcs; // 弧的信息
- int vexnum, arcnum; // 顶点数,弧数
- } MGraph;
-
- void DFS(MGraph g, int k, int visited[])
- {
- int w;
- visited[k]=1;
- for(w=0;w<g.vexnum;w++)
- {
- if(g.arcs[k][w]==1 && visited[w]==0)
- {
- printf("边(%c--%c)\n",g.vexs[k],g.vexs[w]);
- DFS(g,w,visited);
- }
- }
- }
-
- int getIndex(char name, MGraph g)
- {
- int i;
- for(i=0;i<g.vexnum;i++)
- if(g.vexs[i]==name)
- return i;
- return -1;
- }
-
- int main()
- {
- int i,j,n,visited[1000];
- char n1,n2;
- MGraph g;
- printf("Input number of node: ");
- scanf("%d",&n);
- g.vexnum=n;
- for(i=0;i<n;i++)
- {
- printf("node (%d)= ",i);
- fflush(stdin);
- scanf("%c",&(g.vexs[i]));
- }
- for(i=0;i<n;i++)
- for(j=0;j<n;j++)
- g.arcs[i][j]=0;
- for(;;)
- {
- printf("Insert edge i-j: ");
- fflush(stdin);
- scanf("%c%c",&n1,&n2);
- i=getIndex(n1,g);
- j=getIndex(n2,g);
- if(i==-1 && j==-1)
- break;
- g.arcs[i][j]=1;
- g.arcs[j][i]=1;
- }
- for(i=0;i<n;i++)
- visited[i]=0;
- printf("深度优先搜索产生的生成树如下:\n");
- for(i=0;i<n;i++)
- if(visited[i]==0)
- DFS(g, i, visited);
- printf("\n");
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。