C 演算法 狼羊菜過河問題

2021-09-18 06:25:03 字數 2286 閱讀 1533

namespace 狼羊菜過河問題

;//物件陣列

static string start = new string ;//開始情況

static string end = new string ; //結束情況

static int cnt = objects.length;//幾種物件

static int count = 0;//解決方法數

static void main(string args)

);rivercross(courselist, start);

console.readline();

}/// /// 來回過河

///

/// 直到上一步的過河過程集合資訊

/// 上一步過河后河兩岸情況

/// true是過河,false是返回,預設為true

static void rivercross(listcourselist, string riverbank, bool iscross = true)

for (int i = 0; i < cnt; i++)

}else}}

}/// /// 迴圈新增來回過河過程

///

/// 直到上一步的過河過程集合資訊

/// 上一步過河后河兩岸情況

/// 物件的編號,和物件陣列objects有關

/// true是過河,false是返回,預設為true

static void backorforthacrossriver(listcourselist, string riverbank, int i, bool iscross = true)

if (i == 0)

course.info = objects[0] + "獨自" + action;

else

course.info = objects[0] + "帶" + objects[i] + action;

var newriverbank = string.join(",", riverbank).split(',');//通過先將陣列轉字串再轉陣列,來複製資料,而不影響原資料

newriverbank[num] = "0"; newriverbank[num2] = "1";

if (i != 0)

if (checkrepetition(courselist, newriverbank)) return;//重複過河過程,拋棄這個過河方案

if (!checkpassmuster(newriverbank)) return;//不符合要求,拋棄這個過河方案

course.riverbank = newriverbank;

courselist.add(course);

rivercross(courselist, newriverbank, !iscross);//繼續新增下一步的過河/返回操作

courselist.remove(course);//恢復原狀,使得可以遍歷多種情況//重點必須要加

}/// /// 檢測來回過河過程集合中是否有過河之後的河兩岸情況和新的一次的過河之後的河兩岸情況相同的

///

/// 來回過河過程集合

/// 新的一次的過河之後的河兩岸情況

/// 有,返回true,沒有返回false

private static bool checkrepetition(listcourselist, string newriverbank)

}return false;

}/// /// 檢測新的一次的過河之後的河兩岸情況符合不符合要求

///

/// 新的一次的過河之後的河兩岸情況

/// 符合,返回true,不符合,返回false

private static bool checkpassmuster(string newriverbank)

else//河岸一邊有人,則另一邊必定沒人

return true;

}/// /// 寫出過河過程資訊

///

/// 過河過程集合

private static void writerivercross(listcourselist)

種解決方案:\n", ++count);

foreach (var course in courselist)

console.writeline();}}

/// /// 類-過河過程

///

class rivercrosscourse

}

人狼羊菜問題

引用自張銘老師的 資料結構與演算法三 公開課 人狼羊菜 乘船過河 人 狼 菜 羊 沒有過河位置0,已經過河位置1。0 0 0 0 初始值 1 0 0 1 1 1 1 1 全部過河 include include include bool famer int status bool wolf int ...

第 3 3 課 狼 羊 菜和農夫過河問題

農夫需要把狼 羊 菜和自己運到河對岸去 不知道為啥要運狼,別問我 只有農夫能夠划船,而且船比較小,除農夫之外每次只能運一種東西,還有乙個棘手的問題,就是如果沒有農夫看著,羊會偷吃菜,狼會吃羊。請考慮一種方法,讓農夫能夠安全地安排這些東西和他自己過河。這是乙個很簡單的問題,在狼 羊和菜這個食物鏈上,關...

練習程式 演算法系列14 狼 羊 菜和農夫過河問題

參考2 函式物件 關於仿函式 函式物件 ptr fun 參考3 bind2nd使用 include include include include using namespace std const int action count 8 一共有8種動作 int dfs deep 0 int resu...