質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

4003閲覧

川渡りパズル c言語

alastashim

総合スコア16

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/05 06:26

川渡り問題が課題で出され、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C

1int final_state(int step) 2{ 3 if(node[step].Farmer == LEFT) 4 return 0; 5 6 if(node[step].Capra == LEFT) 7 return 0; 8 9 if(node[step].Wolf == LEFT) 10 return 0; 11 12 if(node[step].Cabbage == LEFT) 13 return 0; 14 15 return 1; 16}

投稿2018/12/05 06:36

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alastashim

2018/12/05 06:51

ありがとうございます お陰でスッキリしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問