?? 7_6.txt
字號(hào):
#include<stdio.h>
#define maxsize 100
typedef struct node{
int data;
struct node *next;
}Node;
typedef struct adjnode{
char ch[10];
Node *firstarc;
}Adjnode;
typedef struct q{
int data[maxsize];
int front,rear;
}queue;
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("輸入各頂點(diǎn)的字符串.\n");
for(i=0;i<n;i++)
{ gets(s);
strcpy((*adj)[i].ch,s);
(*adj)[i].firstarc=NULL;
}
printf("請(qǐng)輸入各條邊.\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("邊的頂點(diǎn)輸入不正確!\n");
}
}
int *visited;
bfsadj(Adjnode *adj,int n)
{
Node *p;int i,j;queue q;
q.front=q.rear=0;
for(i=0;i<n;i++)
visited[i]=0;
for(i=0;i<n;i++)
if(visited[i]==0){
visited[i]=1;
printf("==%s==\n",adj[i].ch);
q.rear=(q.rear+1)%maxsize;
q.data[q.rear]=i;
while(q.front!=q.rear){
q.front=(q.front+1)%maxsize;
j=q.data[q.front];
p=adj[j].firstarc;
while(p){
if(visited[p->data]==0){
visited[p->data]=1;
printf("==%s==\n",adj[p->data].ch);
q.rear=(q.rear+1)%maxsize;
q.data[q.rear]=p->data;
}
p=p->next;
}
}
}
}
main()
{
int n,e,i;
Adjnode *adj;
printf("輸入無(wú)向圖的頂點(diǎn)數(shù)和邊數(shù).\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);
bfsadj(adj,n);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -