【正确答案】(1)
#define MAXLEN 30 /*基于邻接链表存储结构的无向图的结点类型定义*/
#define NULL'\0'
int visited[MAXLEN]={0);
typedef struct node
{ int vertex;
struct node*next;
}ANODE;
typedef struct
{ int data;
ANODE*first;
}VNODE;
typedef struct
{ VNODE adjlist[MAXLEN];
int vexnum,arcnum;
}ADJGRAPH;
ADJGRAPH crealz() /*基于邻接链表存储结构的无向图的建立算法*/
{ ANODE*p;
int i,s,d;
ADJGRAPH ag;
printf("input vexnum,input arcnum:");
scanf("/%d,/%d",&ag.vexnum,&ag.arcnum);
printf("input gege dingdian zhi:");
for(i=0;i<ag.vexnum;i++)
{scanf("/%d",&ag.adjlist[i].data);
ag.adjlist[i].first=NULL;
}
for(i=0; i<ag.arcnum;i++)
{printf("input bian de dingdian xuhao:");
scanf("/%d,/%d",&s,&d);
s--;
d--;
p=(ANODE*)malloc(sizeof(ANODE));
p->vert;ex=d;
p->next=ag.adjlist[s].first;
ag.adjlist[s].first=p;
p=(ANODE*)malloc(sizeof(ANODE));
p->vertex=s;
p->next=ag.adjlist[d].first;
ag.adjlist[d].first=p;
}
return ag;
}
void dfs(ADJGRAPH ag,int i) /*无向图的深度优先搜索遍历算法*/
{ ANODE*p;
visited[i-1]=1;
printf("/%3d",ag.adjlist[i-1].data);
p=ag.adjlist[i-1].first;
while(p!=NULL)
{ if(visited[p->vertex]==0)
dfs(ag,(p->vertex)+1);
p=p->next;}
}
main()
{ ADJGRAPH ag;
int i;
ag=creat();
printf("tong di i ge jiedian kaishi:");
scanf("/%d",&i);
dfs(ag,i);
}
(2)
#define maxlen 10 /*基于邻接矩阵存储结构的无向图的结点类型定义*/
int visited[maxlen]=(0);
typedef struct
{ int vexs[maxlen];
int arcs[maxlen][maxlen];
int vexnom,arcnum;
}MGRAPH;
void treat(MGRAPH*g) /*基于邻接矩阵存储结构的无向图的建立算法*/
{ int i,j;
printf("input vexnum,arcnum:");
scanf("/%d/%d",&g->vexnum,&g->arcnum);
for(i=0;i<g->vexnum; i++)
for(j=0;j<g->vexnum;j++)
g->arcs[i][j]=0;
for(i=0;i<g->arcnum;i++)
{printf("bian de dingdian:");
scanf("/%d/%d",&i,&j);
g->arcs[i-1][j-1]=1;
g->arcs[j-1][i-1]=1;
}
}
void print(MGRAPH*g)
{ int i,j;
for(i=0;i<g->vexnum;i++)
{for(j=0;j<g->vexnum;j++)
printf("/%3d",g->arcs[i][j]);
printf("\n");
}
}
void dfs(MGRAPH*g,int i) /*无向图的深度优先搜索遍历算法*/
{ int j;
printf("/%3d",i);
visited[i-1]=1;
for(j=0;j<g->vexnum;j++)
if(g->arcs[i—1][j]==1&&(!visited[j]))
dfs(g,j+1);
}
main()
{ MGRAPH*g,k;
int i;
g=&k;
creat(g);
print(g);
printf("cong di i ge Jiedian fangwen:");
scanf("/%d",&i);
dfs(g,i);
}
【答案解析】