这是邻接表实现的图的广度搜索
邻接表的声明:
struct Node{
char data;
int weight;
Node *next;
};
struct Graph {
int vertnum;
Node *AdjList;
};
Graph MGraph;
建立邻接表:
int getNum( Graph *G,char x){
int i=0;
for( i=0;i<G->vertnum;i++){
if(G->AdjList[i].data==x) {
break;
}
}
return i;
}
void InsertList(Graph *G,char x,char y){
int j=getNum(G,x);
Node *p=&(G->AdjList[j]);
while(p->next){
if(p->next->data >y) break;
p=p->next;
}
Node *tmp=new Node;
tmp->data=y;
tmp->next=p->next;
p->next=tmp;
}
void mycreate(Graph *G){
int i,num;
char x,y;
char tmp;
cin>>num;
G->vertnum=num;
G->AdjList=new Node[num];
for(i=0;i<G->vertnum;i++){
cin>>x;
G->AdjList[i].data=x;
G->AdjList[i].next=NULL;
}
cin>>num;
for(i=0;i<num;i++){
char tmp;
cin>>x>>y;
InsertList(G,x,y);
InsertList(G,y,x);
}
}
输出建立后的邻接表:
void showGraph(Graph *G){
int i;
Node *p;
for(i=0;i<G->vertnum;i++){
cout<<G->AdjList[i].data<<":";
p=G->AdjList[i].next;
while(p){
cout<<" -> "<<p->data;
p=p->next;
}
cout<<"^"<<endl;
}
}
bfs遍历:
void bfs(Graph *G,char x){
add(x);
cout<<x;
vis[x]=1;
while(!isempty()){
del(x);
int ix=getNum(G,x);
Node *p= &G->AdjList[ix];
while(p->next){
char tmp=p->next->data;
if(!vis[tmp]){
cout<<" "<<tmp;
add(tmp);
vis[tmp]=1;
}
p=p->next;
}
}
}