1. 程式人生 > 其它 >鄰接表儲存實現有向網構建

鄰接表儲存實現有向網構建

程式設計實現:以鄰接表的儲存方式,建立一個有向網,頂點為字元型。

輸入格式:

第一行輸入頂點個數和邊的個數,中間用空格分開。下一行開始依次輸入頂點,空格或回車分開。接著依次輸入邊依附的兩個頂點和權值,空格分開。

輸出格式:

若資料合理,則輸出對應的鄰接表形式,見樣例,鄰接點下標與權值空格分開。若頂點個數為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; }