川渡り問題が課題で出され、16行目と40行目を書いたのですが、思っていた実行結果が出ません。
おそらく40行目が違うと思うのですがどうすればいいかわかりません。
よろしくお願いします。
c
1#include <stdio.h> 2#include <string.h> 3 4#define NODES 16 5#define LEFT 0 6#define RIGHT 1 7 8struct NODE { 9 int Farmer, Wolf, Capra, Cabbage; 10} node[NODES]; 11 12int number_of_answers = 0; 13 14int inhibit(int step) 15{ 16 return( (node[step].Farmer != node[step].Capra) && ((node[step].Farmer != node[step].Wolf) || 17 (node[step].Farmer != node[step].Cabbage)) ); 18} 19 20int previous(int step) 21{ 22 int Farmer, Wolf, Capra, Cabbage, i; 23 24 Farmer = node[step].Farmer; 25 Wolf = node[step].Wolf; 26 Capra = node[step].Capra; 27 Cabbage = node[step].Cabbage; 28 29 for (i=0; i<step; i++) { 30 if ( (Farmer == node[i].Farmer) && (Wolf == node[i].Wolf) && 31 (Capra == node[i].Capra) && (Cabbage == node[i].Cabbage) ) { 32 return 1; 33 } 34 } 35 return 0; 36} 37 38int final_state(int step) 39{ 40 return (node[step].Farmer = node[step].Capra = node[step].Wolf = node[step].Cabbage = RIGHT); 41} 42 43void print_member(int step, int lr) 44{ 45 printf("["); 46 if (node[step].Farmer == lr) printf("Farmer "); else printf(" "); 47 if (node[step].Wolf == lr) printf("Wolf "); else printf(" "); 48 if (node[step].Capra == lr) printf("Capra "); else printf(" "); 49 if (node[step].Cabbage == lr) printf("Cabbage"); else printf(" "); 50 printf("]"); 51} 52 53void print_answer(int step) 54{ 55 int i; 56 57 printf("*** Answer #%d ***\n", ++number_of_answers); 58 59 for (i=0; i<=step; i++) { 60 printf("%5d. ", i+1); 61 print_member(i, LEFT); 62 63 if (i == step) { 64 printf(" ==== "); 65 } 66 else { 67 if (node[i].Farmer == LEFT) { 68 printf(" ===> "); 69 } 70 else { 71 printf(" <=== "); 72 } 73 } 74 75 print_member(i, RIGHT); 76 printf("\n"); 77 } 78 printf("\n"); 79} 80 81void search(int step) 82{ 83 int next; 84 int Farmer; 85 86 if (final_state(step)) { 87 print_answer(step); 88 return; 89 } 90 91 if (inhibit(step) || previous(step)) return; 92 93 next = step + 1; 94 Farmer = node[step].Farmer; 95 96 node[next].Farmer = 1 - Farmer; 97 node[next].Wolf = node[step].Wolf; 98 node[next].Capra = node[step].Capra; 99 node[next].Cabbage = node[step].Cabbage; 100 search(next); 101 102 if (node[step].Wolf == Farmer) { 103 node[next].Wolf = 1-Farmer; 104 search(next); 105 node[next].Wolf = Farmer; 106 } 107 108 if (node[step].Capra == Farmer) { 109 node[next].Capra = 1-Farmer; 110 search(next); 111 node[next].Capra = Farmer; 112 } 113 114 if (node[step].Cabbage == Farmer) { 115 node[next].Cabbage = 1-Farmer; 116 search(next); 117 node[next].Cabbage = Farmer; 118 } 119} 120 121int main(void) 122{ 123 node[0].Farmer = node[0].Wolf = node[0].Capra = node[0].Cabbage = LEFT; 124 125 search(0); 126 127 return 0; 128} 129 130
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 06:51