基於鄰接表的新頂點的增加
阿新 • • 發佈:2018-12-04
基於鄰接表的新頂點的增加
釋出時間: 2018年11月26日 10:19 時間限制: 1000ms 記憶體限制: 128M
給定一個無向圖,在此無向圖中增加一個新頂點。
多組資料,每組m+2行。第一行有兩個數字n和m,代表有n個頂點和m條邊。頂點編號為1到n。第二行到第m+1行每行有兩個數字h和k,代表邊依附的兩個頂點。第m+2行有一個數字f,代表新插入的頂點編號。當n和m都等於0時,輸入結束
每組資料輸出n+1行。為增加頂點後的鄰接表。每兩個數字之間用空格隔開。
3 2 1 2 2 3 4 2 1 1 2 4 0 0
1 2 2 3 1 3 2 4 1 2 2 1 4
1 #include<iostream> 2 using namespace std; 3 #define maxn 100 4 5 typedef struct node 6 { 7 int data; 8 struct node *next; 9 }Node; 10 11 int main() 12 { 13 intn, m; 14 int x, y, f; 15 Node *p; 16 Node *V[maxn]; 17 while (1) 18 { 19 cin >> n >> m; 20 if (n == 0 && m == 0) 21 break; 22 for (int i = 0; i<maxn; i++) 23 { 24 V[i] = new Node; 25 V[i]->data = i;26 V[i]->next = NULL; 27 } 28 while (m--) 29 { 30 cin >> x >> y;//標準前插三部曲 31 p = new Node;//建節點 32 p->data = y;//賦初值 33 p->next = V[x]->next;//連後繼 34 V[x]->next = p;//掛前驅 35 p = new Node;//on the contrary 36 p->data = x; 37 p->next = V[y]->next; 38 V[y]->next = p; 39 } 40 cin>>f;//new node coming 41 for (int i = 1; i <= n; i++) 42 { 43 cout << V[i]->data; 44 p = V[i]->next; 45 while (p) 46 { 47 cout<<" "<<p->data; 48 p = p->next; 49 } 50 cout << endl; 51 } 52 cout << f << endl; 53 } 54 return 0; 55 }