鄰接表儲存實現有向網構建
阿新 • • 發佈:2021-11-24
程式設計實現:以鄰接表的儲存方式,建立一個有向網,頂點為字元型。
輸入格式:
第一行輸入頂點個數和邊的個數,中間用空格分開。下一行開始依次輸入頂點,空格或回車分開。接著依次輸入邊依附的兩個頂點和權值,空格分開。
輸出格式:
若資料合理,則輸出對應的鄰接表形式,見樣例,鄰接點下標與權值空格分開。若頂點個數為0,則輸出"error"。若頂點個數為1,邊個數不合理,則輸出"error"
輸入樣例:
在這裡給出一組輸入。例如:
4 4
a b c d
a b 1
a c 1
c d 1
d a 1
結尾無空行
輸出樣例:
在這裡給出相應的輸出。例如:
a->2 1->1 1 b c->3 1 d->0 1
#include<iostream> #include<cstdio> using namespace std; const int N=1010; struct arc{ int e; arc* next; int w; }; struct { int n,m; char vers[N]; arc arcs[N]; }gra; int find(char c){ for(int i=0;i<gra.n;i++){ if(gra.vers[i]==c){ return i; } }return -1; } void add(int u,int v,int w){ arc* p=new arc(); p->e=v; p->next=gra.arcs[u].next; p->w=w; gra.arcs[u].next=p; } void add(char x,char y,int w){ int u=find(x),v=find(y); if(~u&&~v){ add(u,v,w); } else{ cout<<"error"; exit(0); } } int main(){ cin>>gra.n>>gra.m; if(gra.n==0||gra.n==1&&gra.m>1){ cout<<"error"; return 0; } for(int i=0;i<gra.n;i++){ cin>>gra.vers[i]; } for(int i=0;i<gra.m;i++){ char u,v; int w; cin>>u>>v>>w; add(u,v,w); } for(int i=0;i<gra.n;i++){ cout<<gra.vers[i]; arc* p=gra.arcs[i].next; while(p!=NULL){ cout<<"->"<<p->e<<' '<<p->w; p=p->next; } if(i!=gra.n-1) cout<<endl; } return 0; }