📄 7_5.txt
字号:
#include<stdio.h>
typedef struct node{
int data;
struct node *next;
}Node;
typedef struct adjnode{
char ch[10];
Node *firstarc;
}Adjnode;
locate(Adjnode *adj,int n,char *s)
{
int i;
for(i=0;i<n;i++)
if(strcmp(adj[i].ch,s)==0)return i;
return -1;
}
createadj(Adjnode **adj,int n,int e)
{char *s,*t; int i,j,k;
Node *p,*q;
printf("输入各顶点的字符串.\n");
for(i=0;i<n;i++)
{ gets(s);
strcpy((*adj)[i].ch,s);
(*adj)[i].firstarc=NULL;
}
printf("请输入各条边.\n"); /*如v1回车v2回车表明有v1到v2的边*/
for(i=1;i<=e;i++)
{
gets(s);
gets(t);
j=locate(*adj,n,s);
k=locate(*adj,n,t);
if(k>=0 && j>=0){
p=(Node *)malloc(sizeof(Node));
p->data=k;p->next=NULL;
q=(Node *)malloc(sizeof(Node));
q->data=j;q->next=NULL;
p->next=(*adj)[j].firstarc;
(*adj)[j].firstarc=p;
q->next=(*adj)[k].firstarc;
(*adj)[k].firstarc=q;
}
else
printf("边的顶点输入不正确!\n");
}
}
int *visited;
dfsadj(Adjnode *adj,int v)
{
Node *p;int i;
visited[v]=1; printf("==%s==\n",adj[v].ch);
p=adj[v].firstarc;
while(p){
if(visited[p->data]==0)dfsadj(adj,p->data);
p=p->next;
}
}
main()
{
int n,e,i;
Adjnode *adj;
printf("输入无向图的顶点数和边数.\n");
do
scanf("%d%d",&n,&e);
while(n<=0 || e<=0);
getchar();
adj=(Adjnode *)malloc(sizeof(Adjnode)*n);
createadj(&adj,n,e);
visited=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
visited[i]=0;
for(i=0;i<n;i++)
if(visited[i]==0) dfsadj(adj,i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -