問題描述:乙個農夫帶著乙隻狼、乙隻羊和一棵白菜,身處河的南岸。他要把這些東西全部運到北岸。問題是他面前只有一條小船,船小到只能容下他和一件物品,另外只有農夫能撐船。另外,因為狼能吃羊,而羊愛吃白菜,所以農夫不能留下羊和白菜或者狼和羊單獨在河的一邊,自己離開。請問農夫該採取什麼方案才能將所有的東西運過河呢?
思路:此題與通常的過河問題不同之處是,不考慮過河時與物品花費的時間,而是考慮河兩岸物品是否能和諧相處的問題。
通常定義四元組:(農夫,狼,羊,菜),出發點南岸和終點北岸用狀態0,1表示。開始時,他們都在出發點,因此可用(0,0,0,0)表示,最終他們都到達終點(如果可達)可以用(1,1,1,1)表示。因此,該問題可轉述成,求這兩個狀態能否可達,如果可達求出路徑的問題。為方便起見,用十六進製制數0000表示(0,0,0,0)。下圖表示可行的路徑。
通過廣度優先遍歷演算法實現。
具體**如下:
#include "stdio.h"
#include "stdlib.h"
#define maxsize 20
typedef struct seqqueue,*pseqqueue;
pseqqueue init_seqqueue( )
return q;
}int empty_seqqueue(pseqqueue q)
/*判空佇列。返回值:1表示為空,0表示非空*/
int in_seqqueue (pseqqueue q , int x)
else
}int out_seqqueue (pseqqueue q,int *x)
else
}int issafe(int s)
void farmercrossing()
} }
} nextstatus = 15;
printf("\nthe reverse rout:");
while(visited[nextstatus]!= -1)
} int main(void)
農夫過河問題C 遞迴實現
乙個農夫帶著 只狼 乙隻羊和 棵白菜,身處河的南岸。他要把這 些東西全部運到北岸。他面前只有一條小船,船隻能容下他和 件物 品,另外只有農夫才能撐船。如果農夫在場,則狼不能吃羊,羊不能 吃白菜,否則狼會吃羊,羊會吃白菜,所以農夫不能留下羊和白菜自 己離開,也不能留下狼和羊自己離開,而狼不吃白菜。請求...
C 農夫過河問題
農夫過河問題 大家有沒有看過我的c學習中的位算,我們用8位二進位制的數字來表示任務的完成與否,1完成 0未完成 現在我們用4個二進位制數來代表 第一位表示農夫 1 北岸,0 南岸 第二位表示狼 1 北岸,0 南岸 第三位表示?1 北岸,0 南岸 第四位表示白菜 1 北岸,0 南岸 我們怎麼判斷農夫在...
農夫過河問題
題目描述 有乙個農夫帶乙隻羊 一筐菜和乙隻狼過河。如果沒有農夫看管,則狼要吃羊,羊要吃菜。但是船很小,只夠農夫帶一樣東西過河。問農夫該如何解此難題?我的 include include include include include include include using namespace s...