#2
凌云飞翔2012-12-07 00:08
程序代码: #include<stdio.h> #define MaxInt 10000 #define MVNum 100 typedef char VertexType; typedef int ArcType; typedef enum{FALSE,TRUE}define; define visited[MaxInt]; typedef struct { VertexType vexs[MVNum]; ArcType arcs[MVNum][MVNum]; int vexnum,arcnum; }Graph; int Locate(Graph G,char v) { int i; for(i=0;i<G.vexnum;i++) if(G.vexs[i]==v) return i; return -1; } void CreatGraph(Graph &G) { int i,j,w; char v1,v2; printf("输入顶点个数和边条数\n"); scanf("%d,%d",&G.vexnum,&G.arcnum); getchar(); for(i=0;i<G.vexnum;i++) { printf("输入第%d个顶点:",i+1); scanf("%c",&G.vexs[i]); getchar(); } for(i=0;i<G.vexnum;i++)//初始化 { for(j=0;j<G.vexnum;j++) { G.arcs[i][j]=MaxInt; } } for(i=0;i<G.arcnum;i++) { printf("请输入第%d条边所依附的顶点及边上权值:",i+1); scanf("%c,%c,%d",&v1,&v2,&w); getchar () ; } i=Locate(G,v1); j=Locate(G,v2); G.arcs[i][j]=w; G.arcs[j][i]=G.arcs[i][j]; } void DFS(Graph G,int i) { int j; printf("%5c",G.vexs[i]); //访问顶点vi visited[i]=TRUE; for(j=0;j<G.vexnum;j++) //依次搜索vi邻接点 if(G.arcs[i][j]!=MaxInt && !visited[j]) DFS(G,j); } void DFSsearch(Graph G) { int i; for(i=0;i<G.vexnum;i++) visited[i]=FALSE; for(i=0;i<G.vexnum;i++) if(!visited[i]) DFS(G,i); } void main() { Graph G; CreatGraph(G); printf("*******************无向网创建完成******************\n"); printf("深度优先遍历顺序:\n"); DFSsearch(G); printf("\n"); } |
编译没错,就是最后得不到遍历结果希望大家给运行看看是怎么回事呀,谢了谢了。。。
#include<stdio.h>
#define MaxInt 10000
#define MVNum 100
typedef char VertexType;
typedef int ArcType;
typedef enum{FALSE,TRUE}define;
define visited[MaxInt];
typedef struct
{
VertexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
}Graph;
int Locate(Graph G,char v)
{
int i;
for(i=0;i<G.vexnum;i++)
if(G.vexs[i]==v)
return i;
return -1;
}
void CreatGraph(Graph G)
{
int i,j,w;
char v1,v2;
printf("输入顶点个数和边条数\n");
scanf("%d,%d",&G.vexnum,&G.arcnum);
getchar();
for(i=0;i<G.vexnum;i++)
{
printf("输入第%d个顶点:",i+1);
scanf("%c",&G.vexs[i]);
getchar();
}
for(i=0;i<G.vexnum;i++)//初始化
{
for(j=0;j<G.vexnum;j++)
{
G.arcs[i][j]=MaxInt;
}
}
for(i=0;i<G.arcnum;i++)
{
printf("请输入第%d条边所依附的顶点及边上权值:",i+1);
scanf("%c,%c,%d",&v1,&v2,&w);
getchar();
}
i=Locate(G,v1);
j=Locate(G,v2);
G.arcs[i][j]=w;
G.arcs[j][i]=G.arcs[i][j];
}
void DFS(Graph G,int i)
{
int j;
printf("%c\n",G.vexs[i]); //访问顶点vi
visited[i]=TRUE;
for(j=0;j<G.vexnum;j++) //依次搜索vi邻接点
if(G.arcs[i][j]!=MaxInt && !visited[j])
DFS(G,j);
}
void DFSsearch(Graph G)
{
int i;
for(i=0;i<G.vexnum;i++)
visited[i]=FALSE;
for(i=0;i<G.vexnum;i++)
if(!visited[i])
DFS(G,i);
}
void main()
{
Graph G;
CreatGraph(G);
printf("*******************无向网创建完成******************\n");
printf("深度优先遍历顺序:\n");
DFSsearch(G);
}