DS圖—圖的鄰接矩陣儲存及度計算
阿新 • • 發佈:2018-11-08
題目描述
假設圖用鄰接矩陣儲存。輸入圖的頂點資訊和邊資訊,完成鄰接矩陣的設定,並計算各頂點的入度、出度和度,並輸出圖中的孤立點(度為0的頂點)
--程式要求--
若使用C++只能include一個頭檔案iostream;若使用C語言只能include一個頭檔案stdio
程式中若include多過一個頭檔案,不看程式碼,作0分處理
不允許使用第三方物件或函式實現本題的要求
輸入
測試次數T,每組測試資料格式如下:
圖型別 頂點數 (D—有向圖,U—無向圖)
頂點資訊
邊數
每行一條邊(頂點1 頂點2)或弧(弧尾 弧頭)資訊
輸出
每組測試資料輸出如下資訊(具體輸出格式見樣例):
圖的鄰接矩陣
按頂點資訊輸出各頂點的度(無向圖)或各頂點的出度 入度 度(有向圖)。孤立點的度資訊不輸出。
圖的孤立點。若沒有孤立點,不輸出任何資訊。
樣例輸入
2
D 5
V1 V2 V3 V4 V5
7
V1 V2
V1 V4
V2 V3
V3 V1
V3 V5
V4 V3
V4 V5
U 5
A B C D E
5
A B
A C
B D
D C
A D
樣例輸出
0 1 0 1 0
0 0 1 0 0
1 0 0 0 1
0 0 1 0 1
0 0 0 0 0
V1: 2 1 3
V2: 1 1 2
V3: 2 2 4
V4: 2 1 3
V5: 0 2 2
0 1 1 1 0
1 0 0 1 0
1 0 0 1 0
1 1 1 0 0
0 0 0 0 0
A: 3
B: 2
C: 2
D: 3
E
#include<iostream> #include<cstring> using namespace std; int find(string str[], string st, int n){ for(int i= 0; i< n; i++) if(str[i]== st) return i; } int main(){ int t; cin>>t; while(t--){ string ch; int n; cin>>ch>>n; string str[200]; for(int i= 0; i< n; i++) cin>>str[i]; int array[n+ 5][n+5]; for(int i= 0; i< n+ 5; i++) for(int j= 0 ; j< n+ 5; j++) array[i][j]= 0; int in; cin>>in; for(int i= 0 ; i< in; i++){ string s1; string s2; cin>>s1>>s2; int a= find(str, s1, n); int b= find(str, s2, n); //cout<<a<<" "<<b<<"_____"<<endl; array[a][b]= 1; if(ch== "U") array[b][a]= 1; } for(int i= 0; i< n; i++){ for(int j= 0; j< n; j++){ cout<<array[i][j]; if(j!= n- 1) cout<<" "; } cout<<endl; } for(int i= 0; i< n; i++){ cout<<str[i]; int inn= 0; int outt= 0; for(int j= 0; j< n; j++){ if(array[i][j]) outt++; } for(int j= 0; j< n; j++){ if(array[j][i]) inn++; } if(ch== "U"){ if(inn+ outt){ cout<<": "<<(inn+outt)/ 2<<endl; } } else if(ch== "D"){ if(inn+ outt) cout<<": "<<outt<<" "<<inn<<" "<<inn+ outt<<endl; } } } return 0; }