1. 程式人生 > >基於鄰接表的新頂點的增加

基於鄰接表的新頂點的增加

基於鄰接表的新頂點的增加

釋出時間: 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     int
n, 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 }