問題:有一人帶著狼羊菜來到河的左岸欲乘乙隻小船過到右岸,每次人只能帶其中乙個過河
,當有人在不會有事
,當無人在時
,就不允
許狼和羊在一起,
也不允許羊和菜在一起,設計演算法以最少的次數過河?
採用位向量,4個二進位制位的0/1情況表示狀態,顯而易見,共24=16種可能狀態。從高位到低位分別表示農夫、狼、白菜和羊。
0000(整數0)表示都在左岸,目標狀態1111(即整數15)表示都到了右岸。有些狀態0011,0101,0111,0001,1100,1001是不允許出現的,
因為這些狀態是不安全狀態。狀態圖如下:
typedef struct seqqueue * pseqqueue; // 重定義佇列指標型別名
pseqqueue createemptyqueue_seq()
int isemptyqueue_seq( pseqqueue paqu )
// 將元素x插在隊尾
void enqueue_seq( pseqqueue paqu, datatype x )
}// 刪除佇列頭部元素
void dequeue_seq( pseqqueue paqu )
// 隊首狀態
datatype frontqueue_seq( pseqqueue paqu )
/* 使用4個二進位制位0/1表示狀態
從高位到地位分別表示農夫、狼、羊和白菜
0000表示均在左岸,1111表示均在右岸
二進位制0x08即1000
0x08----1000
0x04----0100
0x02----0010
0x01----0001
以下是個體狀態判斷函式farmer()、wolf()、cabbage()、goat()返回0/1表示左岸/右岸
*/int farmer(int location)
int wolf(int location)
int goat(int location)
int cabbage(int location)
//安全狀態的判斷函式
int safe(int location)
//將十進位制數val轉化為二進位制輸出
void printbinary(int val)
} void farmerproblem() }}
}//到達最終狀態
if(route[15] != -1)
return;
}}
}else
printf("no solution.\n");
}int main()
農夫過河問題
題目描述 有乙個農夫帶乙隻羊 一筐菜和乙隻狼過河。如果沒有農夫看管,則狼要吃羊,羊要吃菜。但是船很小,只夠農夫帶一樣東西過河。問農夫該如何解此難題?我的 include include include include include include include using namespace s...
求解農夫過河問題
問題 乙個農夫帶著一匹狼 乙隻羊 一顆白菜要過河,只有一條船而且農夫每次最多只能帶乙個動物或物品過河,並且當農夫不在的時候狼會吃羊,羊會吃白菜,列出所有安全將所有動物和物品帶過河的方案。思路分析 顯然這不是乙個最優解的問題,最容易想到的方法就是遍歷了,設法用遍歷列舉出所有可能出現的情況,根據條件選取...
C 農夫過河問題
農夫過河問題 大家有沒有看過我的c學習中的位算,我們用8位二進位制的數字來表示任務的完成與否,1完成 0未完成 現在我們用4個二進位制數來代表 第一位表示農夫 1 北岸,0 南岸 第二位表示狼 1 北岸,0 南岸 第三位表示?1 北岸,0 南岸 第四位表示白菜 1 北岸,0 南岸 我們怎麼判斷農夫在...