做图的题目都是要先建立一个邻接表的,下面是简单的建立有向图的邻接表的。
#include <iostream>
using namespace std;
struct ENode{
int adjVex;
ENode *nextArc;
};
int main(){
int i;
int n,e;//顶点,边
int u,v;//一条边的两个顶点
ENode **a,*t;
cin>>n>>e;
a=new ENode*[n];
for(i=0;i<n;i++)
a[i]=NULL;
for(i=0;i<e;i++){
cin>>u>>v;
t=new ENode;
t->adjVex=v;
t->nextArc=a[u];
a[u]=t;
}
for(i=0;i<n;i++){
cout<<"a["<<i<<"]";
t=a[i];
while(t!=NULL){
cout<<"->"<<t->adjVex;
t=t->nextArc;
}
cout<<endl;
}
return 0;
}
要想建立无向图的邻接表,只要在输入边的循环里再加入如下代码就行,其实就是两边都有。
for(i=0;i<e;i++){
cin>>u>>v;
t=new ENode;
t->adjVex=v;
t->nextArc=a[u];
a[u]=t;
t=new ENode;
t->adjVex=u;
t->nextArc=a[v];
a[v]=t;
}
这样我们就把邻接表建立起来了,后面图的操作就可以完成啦。