#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;

#includebitsstdc++husing namespace std;#define MVnum 100int visitedMVnum=0;int queuesMVnum;边表typedef struct ArcNode			int adjvex; 		邻接点位置	struct ArcNode next; ArcNode;顶点——一维数组typedef struct VNode	int

原文地址: https://www.cveoy.top/t/topic/faKT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录