|
|
#2
hzh5122010-06-02 20:51
|
代码如下:
#include <stdio.h>
#define MAXNODE 64
typedef char VertexType;
typedef int EdgeType;
typedef struct
{
VertexType vexs[MAXNODE];
EdgeType arcs[MAXNODE][MAXNODE];
int vexnum,arcnum;
}MGgraph;
int visited[MAXNODE];
MGgraph CreatMGgraph()
{
MGgraph G;
int i,j;
VertexType x;
G.vexnum=0;
scanf("%c",&x);
while(x!='#')
{
G.vexnum++;
G.vexs[G.vexnum]=x;
scanf("%c",&x);
}
G.arcnum=0;
for(i=1;i<=G.vexnum;i++)
for(j=1;j<=G.vexnum;j++)
G.arcs[i][j]=0;
scanf("%d",&i);
scanf("%d",&j);
while(i&&j)
{
G.arcs[i][j]=1;
G.arcs[j][i]=1;
G.arcnum++;
scanf("%d",&i);
scanf("%d",&j);
}
for(i=1;i<=G.vexnum;i++)
G.arcs[i][i]=0;
return G;
}
int first(MGgraph G,int v)
{
int i;
for(i=1;i<=G.vexnum;i++)
if(G.arcs[v][i]!=0&&visited[i]==0) return i;
return 0;
}
int next(MGgraph G,int v ,int w)
{
int i;
for(i=w;i<=G.vexnum;i++)
if(G.arcs[v][i]!=0&&visited[i]==0) return i;
return 0;
}
void DFS(MGgraph G,int v)
{
int w;
visited[v]=1;
printf("%c",G.vexs[v]);
for(w=first(G,v);w;w=next(G,v,w))
if(!visited[w]) DFS(G,w);
}
void DFStraverse(MGgraph G)
{
int v;
for(v=1;v<=G.vexnum;v++)
visited[v]=0;
for(v=1;v<=G.vexnum;v++)
if(!visited[v]) DFS(G,v);
}
int main()
{
MGgraph G;
G=CreatMGgraph();
DFStraverse(G);
return 0;
}
当我输入:abcdefgh#1 2 1 3 2 4 2 5 3 6 3 7 4 8 5 8 6 8 7 8 0 0 enter时
竟然出现abdhefcg
应该是abdghecfg才对啊?