題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=5641php
題目類型:水題測試
題目思路:將點x到點y所須要跨過的點存入mark[x][y]中(無需跨過其它點存0),而後按照題目給的路徑逐一判斷是否可走,得出結果。spa
須要判斷的:code
1.給出的點是否在1~9之間blog
2.點的數量n是否在4~9之間get
3.有沒有重複的點string
4.兩點之間(x-->y)是否須要跨過第三點(z),該點(z)是否已經走過it
測試樣例(基本考慮了全部狀況):io
10
4 1 3 6 2
4 6 2 1 3
4 8 1 6 7
6 2 1 2 3 5 7
6 1 5 8 2 6 7
5 4 2 8 5 6
5 12 3 4 5 6
7 0 1 2 3 4 5 6
3 1 5 9
9 1 5 9 4 2 6 3 7 8
1.invalid
2.valid
3.valid
4.invalid
5.valid
6.invalid
7.invalid
8.invalid
9.invalid
10.valid
實現代碼:class
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 //若從i->j 必須通過其它點,存入mark[i][j]中,不然mark[i][j]爲0 6 int mark[10][10] = { 7 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 { 0, 0, 0, 2, 0, 0, 0, 4, 0, 5 }, 9 { 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, 10 { 0, 2, 0, 0, 0, 0, 0, 5, 0, 6 }, 11 { 0, 0, 0, 0, 0, 0, 5, 0, 0, 0 }, 12 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 13 { 0, 0, 0, 0, 5, 0, 0, 0, 0, 0 }, 14 { 0, 4, 0, 5, 0, 0, 0, 0, 0, 8 }, 15 { 0, 0, 5, 0, 0, 0, 0, 0, 0, 0 }, 16 { 0, 5, 0, 6, 0, 0, 0, 8, 0, 0 } 17 }; 18 19 //a[]存走的路線 20 int a[10]; 21 22 //num[]統計各個點出現的次數 23 int num[10]; 24 25 //flag[]記錄各個點是否被走過,0表示未走,1表示已走 26 int flag[10]; 27 28 int main() 29 { 30 int T; 31 int n; 32 int i, ans; 33 scanf("%d", &T); 34 while (T--) 35 { 36 scanf("%d", &n); 37 ans = 1; 38 memset(a, 0, sizeof(a)); 39 memset(num, 0, sizeof(num)); 40 memset(flag, 0, sizeof(flag)); 41 for (i = 1; i <= n; i++) 42 { 43 scanf("%d", &a[i]); 44 if(a[i]<1 || a[i]>9) //點是否在範圍內 45 ans = 0; 46 } 47 if(!ans) 48 { 49 printf("invalid\n"); 50 continue; 51 } 52 for(i=1; i<=n; i++) 53 num[a[i]]++; 54 for (i = 1; i <= 9; i++) { 55 if (num[i] > 1) 56 break; 57 } 58 if (n < 4 || n >9 || i<10) //點的數量是否在範圍內,各點是否是最多隻有一個 59 { 60 printf("invalid\n"); 61 continue; 62 } 63 int x, y; 64 for (i = 1; i < n; i++) //n個點會有n-1條線 65 { 66 x = a[i]; 67 y = a[i + 1]; 68 if ( (mark[x][y] != 0) && (flag[mark[x][y]] == 0) ) 69 { 70 ans = 0; //若是x->y須要跨過點mark[x][y],而mark[x][y]未走過,則不可行 71 break; 72 } 73 flag[x] = 1; 74 } 75 if (ans) 76 printf("valid\n"); 77 else 78 printf("invalid\n"); 79 } 80 return 0; 81 }