程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 程序-C語言,狼,白菜,過河方法

程序-C語言,狼,白菜,過河方法

編輯:編程綜合問答
C語言,狼,白菜,過河方法

一個人帶著一只羊,一條狼和一個白菜想過河,假設他每次只能帶一只羊,或者一條狼,或者一棵白菜過河,並限定人不在場時,狼和羊,或羊和白菜不能單獨在一起,試編寫程序求出他帶一只羊,一條狼,一個白菜過河的方法。

最佳回答:


 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STEP 20 //index: 0 - 狼,1-羊,2-菜,3-農夫,value:0-本岸,1-對岸 int a[MAX_STEP][4]; int b[MAX_STEP]; char *name[] = { "空手", "帶狼", "帶羊", "帶菜" }; void search(int iStep) { int i; if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4) { for (i = 0; i < iStep; i++) { if (a[i][3] == 0) { printf("%s到對岸\n", name[b[i] + 1]); } else { printf("%s回本岸\n", name[b[i] + 1]); } } printf("\n"); return; } for (i = 0; i < iStep; i++) { if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0) { return; } } if (a[iStep][1] != a[iStep][3] && (a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1])) { return; } for (i = -1; i <= 2; i++) { b[iStep] = i; memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1])); a[iStep + 1][3] = 1 - a[iStep + 1][3]; if (i == -1) { search(iStep + 1); } else if (a[iStep][i] == a[iStep][3]) { a[iStep + 1][i] = a[iStep + 1][3]; search(iStep + 1); } } } int main() { search(0); return 0; }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved