赞
踩
- #include<stdio.h>
- #include<stdlib.h>
- #include<iostream>
- #include<queue>
- using namespace std;
- #define MAX 100
- typedef struct Anode{//子 无向图
- int adjvex;//所指点索引
- struct Anode *next;
- }Anode;
- typedef struct Vnode{//顶点
- char data;//顶点信息
- Anode *firsta;//第一个子
- }Vnode,Adjlist[MAX];
- typedef struct{
- Adjlist ver;//一个数组
- int vexnum,arcnum;//顶点个数/边个数
- }Algraph;
- int find(Algraph G,int u){
-
- for(int i=1;i<=G.vexnum;i++){
- if(u==G.ver[i].data)return i;
- }
- return -1;
- }
- void creat(Algraph &G){
- cout<<"input vexnum and arcnum:";
- cin>>G.vexnum>>G.arcnum;
- cout<<"input every node"<<endl;
- for(int i=1;i<=G.vexnum;i++){
- cin>>G.ver[i].data;
- G.ver[i].firsta=NULL;
- }
- getchar();
- cout<<"start end "<<endl;
- for(int i=1;i<=G.arcnum;i++){
- char aa,bb;
- cin>>aa>>bb;
- getchar();
- int a=find(G,aa);
- int b=find(G,bb);
- Anode *p1=new Anode;//新建首点
- p1->adjvex=b;
- p1->next=G.ver[a].firsta;
- G.ver[a].firsta=p1;//头插法
- Anode *p2=new Anode;//新建首点
- p2->adjvex=a;
- p2->next=G.ver[b].firsta;
- G.ver[b].firsta=p2;//头插法
- }
- }
- void print(Algraph &G){
- Anode *p;
- for(int i=1;i<=G.vexnum;i++){
- cout<<G.ver[i].data;
- for(p=G.ver[i].firsta;p!=NULL;p=p->next){
- cout<<"-> "<<p->adjvex;
- }
- cout<<endl;
- }
- }
-
- bool visit[MAX];
-
- void bfs(Algraph G){
- for(int i=1;i<=G.vexnum;i++)visit[i]=0;
- queue<int>q;
- for(int i=1;i<=G.vexnum;i++){
- if(!visit[i]){
- visit[i]=1;
- cout<<G.ver[i].data;
- q.push(i);
- while(!q.empty()){
- int u=q.front();
- q.pop();
- for(Anode * edge=G.ver[u].firsta;edge!=NULL;edge=edge->next){
- if(!visit[edge->adjvex]){
- cout<<G.ver[edge->adjvex].data;
- visit[edge->adjvex]=1;
- q.push(edge->adjvex);
- }
- }
- }
- }
-
- }cout<<endl;
- }
- int main(){
- Algraph G;
-
- creat(G);
- print(G);
- cout<<"bfs"<<endl;
- bfs(G);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。