有手就行。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct zong{
char a[50];
int juzhen[50][50];
int n,e;
};
int vis[50];
queue<int>q;
void bfs(struct zong *s,int i)
{
int j,k;
printf("%c\n",s->a[i]);
vis[i]=1;
q.push(i);
while(!q.empty())
{
k=q.front();
q.pop();
for(j=0;j<s->n;j++)
{
if(s->juzhen[k][j]==1&&vis[j]==0)
{
printf("%c\n",s->a[j]);
vis[j]=1;
q.push(j);
}
}
}
}
int main()
{
struct zong*s;int i,j,k,x,y;
s=(struct zong*)malloc(sizeof(struct zong));
printf("请输入顶点数和边数\n");
scanf("%d%d",&s->n,&s->e);
getchar();
printf("请输入顶点的信息\n");
for(i=0;i<s->n;i++)
{
scanf("%c",&s->a[i]);
getchar();
}
for(i=0;i<s->n;i++)
{
for(j=0;j<s->n;j++)
{
s->juzhen[i][j]=0;
}
}
printf("请输入边的信息\n");
for(i=0;i<s->e;i++)
{
scanf("%d%d",&x,&y);
s->juzhen[x][y]=1;
s->juzhen[y][x]=1;
}
for(i=0;i<s->n;i++)
{
vis[i]=0;
}
for(i=0;i<s->n;i++)
{
if(!vis[i])bfs(s,i);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
struct node{
int x;
struct node*next;
};
struct cc{
char data;
struct node *first;
};
struct zong{
struct cc p[50];
int n,e;
};
int vis[20];
void dfs(struct zong *s,int i)
{
printf("%c\n",s->p[i].data);
vis[i]=1;
struct node *p;
p=s->p[i].first;
while(p)
{
if(!vis[p->x])dfs(s,p->x);
p=p->next;
}
}
int main()
{
struct node *t,*q;
int n,e,i,x,y;
printf("请输入顶点数和边数\n");
scanf("%d%d",&n,&e);
getchar();
struct zong *s;
s=(struct zong *)malloc(sizeof(struct zong));
s->n=n;s->e=e;
printf("请输入顶点信息\n");
for(i=0;i<n;i++)
{
scanf("%c",&s->p[i].data);
s->p[i].first=NULL;
getchar();
}
printf("请输入每条边对应的两个顶点的序号\n");
for(i=0;i<e;i++)
{
scanf("%d%d",&x,&y);
t=(struct node*)malloc(sizeof(struct node));
t->x=y;
t->next=s->p[x].first;
s->p[x].first=t;
q=(struct node*)malloc(sizeof(struct node));
q->x=x;
q->next=s->p[y].first;
s->p[y].first=q;
}
for(i=0;i<n;i++)
{
vis[i]=0;
}
for(i=0;i<n;i++)
{
if(!vis[i])dfs(s,i);
}
return 0;
}