fork(1) download
  1. #include <stdio.h>
  2.  
  3. char *name[] = {
  4. "",
  5. "01:北海道",
  6. "02:青森県", "03:岩手県", "04:宮城県", "05:秋田県", "06:山形県", "07:福島県",
  7. "08:茨城県", "09:栃木県", "10:群馬県", "11:埼玉県", "12:千葉県", "13:東京都", "14:神奈川県",
  8. "15:新潟県", "16:富山県", "17:石川県", "18:福井県", "19:山梨県", "20:長野県",
  9. "21:岐阜県", "22:静岡県", "23:愛知県", "24:三重県",
  10. "25:滋賀県", "26:京都府", "27:大阪府", "28:兵庫県", "29:奈良県", "30:和歌山県",
  11. "31:鳥取県", "32:島根県", "33:岡山県", "34:広島県", "35:山口県",
  12. "36:徳島県", "37:香川県", "38:愛媛県", "39:高知県",
  13. "40:福岡県", "41:佐賀県", "42:長崎県", "43:熊本県", "44:大分県", "45:宮崎県", "46:鹿児島県", "47:沖縄県",
  14. };
  15.  
  16. int connect[][10] =
  17. {
  18. {1, 2},
  19. {2, 3, 5},
  20. {3, 4, 5, 6},
  21. {4, 5, 6, 7},
  22. {5, 6},
  23. {6, 7, 15},
  24. {7, 8, 9, 10, 15},
  25. {8, 9, 11, 12},
  26. {9, 10, 11, 12, 13},
  27. {10, 11, 19, 20},
  28. {11, 12, 13, 19, 20},
  29. {12, 13},
  30. {13, 14, 19},
  31. {14, 19},
  32. {15, 16, 20},
  33. {16, 17, 20, 21},
  34. {17, 18, 21},
  35. {18, 21,25,26},
  36. {19, 20,22},
  37. {20, 22,23},
  38. {21, 23,24,25},
  39. {22, 23},
  40. {23, 24},
  41. {24, 25,26,29},
  42. {25, 26,27,29},
  43. {26, 27,28,29},
  44. {27, 28,29,30},
  45. {28, 31,33},
  46. {29, 30},
  47. {31, 32,33,34},
  48. {32, 33,34,35},
  49. {33, 34,37},
  50. {34, 35,38},
  51. {35, 40},
  52. {36, 37,38,39},
  53. {37, 38,39},
  54. {38, 39},
  55. {40, 41,43,44},
  56. {41, 42,43},
  57. {43, 44,45,46},
  58. {44, 43,45},
  59. {45, 46},
  60. {46, 47},
  61. {-1}
  62. };
  63.  
  64. int neigh[48][48];
  65. void travel(int ken);
  66. int main()
  67. {
  68. int i,j,k,ken,flag;
  69.  
  70. /* 県ごとの隣接テーブルを作る */
  71. for(i=0;connect[i][0] != -1;i++) {
  72. ken = connect[i][0];
  73. for(j=1;j<10;j++) {
  74. if(connect[i][j]){
  75. neigh[ken][connect[i][j]] = 1;
  76. neigh[connect[i][j]][ken] = 1;
  77. }
  78. }
  79. }
  80.  
  81. travel(47); /* 沖縄から */
  82. return 0;
  83. }
  84.  
  85. char visited[48];
  86. char path[100];
  87. int pass = 0;
  88.  
  89. void travel(int ken)
  90. {
  91. int i,next,f;
  92.  
  93. if(ken == 47 && pass > 0) {
  94. printf("==== result ====\n");
  95. printf("%s ", name[47]);
  96. for(i=0;i<pass;i++) {
  97. printf("-> %s", name[path[i]]);
  98. }
  99. exit(0);
  100. }
  101.  
  102. /* 隣接県を全部試す */
  103. for(next=1; next<48; next++) {
  104. if(neigh[ken][next] == 0) continue;
  105.  
  106. if(visited[next] >= 2) continue;
  107. visited[next]++;
  108. path[pass++] = next;
  109. travel(next);
  110. visited[next]--;
  111. pass -= 1;
  112. }
  113. }
  114.  
  115.  
Success #stdin #stdout 0s 2256KB
stdin
Standard input is empty
stdout
==== result ====
47:沖縄県 -> 46:鹿児島県-> 43:熊本県-> 40:福岡県-> 35:山口県-> 32:島根県-> 31:鳥取県-> 28:兵庫県-> 26:京都府-> 18:福井県-> 17:石川県-> 16:富山県-> 15:新潟県-> 06:山形県-> 03:岩手県-> 02:青森県-> 01:北海道-> 02:青森県-> 03:岩手県-> 04:宮城県-> 05:秋田県-> 04:宮城県-> 05:秋田県-> 06:山形県-> 07:福島県-> 08:茨城県-> 07:福島県-> 08:茨城県-> 09:栃木県-> 10:群馬県-> 09:栃木県-> 10:群馬県-> 11:埼玉県-> 12:千葉県-> 11:埼玉県-> 12:千葉県-> 13:東京都-> 14:神奈川県-> 13:東京都-> 14:神奈川県-> 19:山梨県-> 20:長野県-> 15:新潟県-> 16:富山県-> 17:石川県-> 18:福井県-> 21:岐阜県-> 23:愛知県-> 20:長野県-> 19:山梨県-> 22:静岡県-> 23:愛知県-> 21:岐阜県-> 24:三重県-> 25:滋賀県-> 24:三重県-> 25:滋賀県-> 26:京都府-> 27:大阪府-> 28:兵庫県-> 31:鳥取県-> 32:島根県-> 33:岡山県-> 34:広島県-> 33:岡山県-> 34:広島県-> 35:山口県-> 40:福岡県-> 41:佐賀県-> 42:長崎県-> 41:佐賀県-> 43:熊本県-> 44:大分県-> 45:宮崎県-> 44:大分県-> 45:宮崎県-> 46:鹿児島県-> 47:沖縄県