#includebitsstdc++husing namespace std;#define MVnum 100int visitedMVnum=0;int queuesMVnum;边表typedef struct ArcNode int adjvex; 邻接点位置 struct ArcNode next; ArcNode;顶点——一维数组typedef struct VNode int
#include<bits/stdc++.h> using namespace std; #define MVnum 100 int visited[MVnum]={0}; int queues[MVnum];
//边表 typedef struct ArcNode{ int adjvex; //邻接点位置 struct ArcNode *next; }ArcNode; //顶点——一维数组 typedef struct VNode{ int data; //顶点信息 ArcNode *firstadj; //连接顶点和边表 }VNode; //邻接表 typedef struct{ VNode *vexs; // int vexnum,arcnum; //顶点数和边数 }ALGraph; //创建图 void CreateGraph(ALGraph *G) { G->vexs=(VNode *)malloc(sizeof(VNode)*MVnum); int i,j,k; ArcNode *s;
//初始化 顶点数据
for(i=1;i<=G->vexnum;i++)
{
G->vexs[i].data=i;
G->vexs[i].firstadj=NULL;
}
//边
for(k=0;k<G->arcnum;k++)
{
cin>>i>>j;
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=j;
s->next=G->vexs[i].firstadj;
G->vexs[i].firstadj=s;
//
// 将 i 插入到 j 的邻接表头部
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex = i;
s->next = G->vexs[j].firstadj;
G->vexs[j].firstadj = s;
}
}
//广搜
void BFS(ALGraph G,int v)
{
int front=0,rear=1;//数组模拟队列
visited[v]=1;
queues[++rear]=v; //入队
while(front!=rear){
int w=queues[++front]; //出队
cout<<G.vexs[w].data<<' ';
for(ArcNode *p=G.vexs[w].firstadj;p!=NULL;p=p->next){
if(!visited[p->adjvex]){
visited[p->adjvex]=1;
queues[++rear]=p->adjvex;
}
} //for
}//while
}
void BFSTraverse(ALGraph G,int s){
int ans=0,i;
if(visited[s]==0)
BFS(G,s);
for(i=1;i<=G.vexnum;i++)
{
if(!visited[i]){
ans++;
cout<<'\n'<<0<<' ';
BFS(G,i);
}
}
if(ans!=0)
cout<<'\n'<<0<<endl;
}
int main() { ALGraph G; int s; cin>>G.vexnum>>G.arcnum>>s; //输入顶点数和边数 CreateGraph(&G); BFSTraverse(G,s); return 0;
原文地址: https://www.cveoy.top/t/topic/faKT 著作权归作者所有。请勿转载和采集!