#include<cstdio> #include<vector> #include<cstring> #include<algorithm> #include <iostream> using namespace std; const int MAXN=10; struct node { int to,cost; }; int a[MAXN][MAXN]; vector<node> v[MAXN]; int n,m=5; //m個頂點 void init1() //鄰接矩陣 { int i,j; for(i=1;i<=n;i++) { int x,y,z=1; //z爲權值,也可本身輸入 cin>>x>>y; a[x][y]=z; } for(i=1;i<=m;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } return ; } void init2() //鄰接表 { int i,j; for(i=1;i<=n;i++) { int x; node y; y.cost=1; //cost爲權值 cin>>x>>y.to; v[x].push_back(y); } for(i=1;i<=m;i++) { for(j=0;j<v[i].size();j++) cout<<i<<" "<<v[i][j].to<<" "<<v[i][j].cost<<endl; } return ; } int cnt=0; int head[MAXN]; struct Node { int to,cost,next; }edge[MAXN]; void init3() //鏈式前向星 { int i,j; int start,endd,cost; memset(head,-1,sizeof(head)); for(i=0;i<n;i++) { cost=1; scanf("%d%d",&start,&endd); edge[cnt].to=endd; edge[cnt].cost=cost; edge[cnt].next=head[start]; head[start]=cnt++; } for(start=1;start<=m;start++) for(i=head[start];i!=-1;i=edge[i].next) printf("(%d %d)--> %d\n",start,edge[i].to,edge[i].cost); return ; } int main() { cin>>n; //輸入n組數據 init1(); //鄰接矩陣 init2(); //鄰接表 init3(); //鏈式前向星 return 0; }
樣例: 7 1 2 2 3 3 4 1 3 4 1 1 5 4 5
鄰接矩陣運行結果 0 1 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0
鄰接表運行結果 1 2 1 1 3 1 1 5 1 2 3 1 3 4 1 4 1 1 4 5 1
鏈式前向星運行結果 (1 5)-->1 (1 3)-->1 (1 2)-->1 (2 3)-->1 (3 4)-->1 (4 5)-->1 (4 1)-->1