李白打酒(DFS小例子)

2021-07-28 09:23:46 字數 1624 閱讀 4803

題目描述:

話說大詩人李白,一生好飲。幸好他從不開車。

無事街上走,提壺去打酒。

逢店加一倍,遇花喝一斗。

這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。

請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。

注意:通過瀏覽器提交答案。答案是個整數。不要書寫任何多餘的內容。

首先說一下自己其中乙個錯誤的思路,收到前面做的象棋的影響,把整個局面想象成了乙個map,2×15,其中第一列為a第二列為b,利用dfs搜尋之後發現有很多重複的字串,還得判重,非常的麻煩,最終放棄,貼上第一次dfs的錯誤**。(2017/3/12)

//錯誤的示例,後續提醒自己不要犯錯2017/3/12

#include

#include

using

namespace

std;

char mapalpha[15][2] = ;

char alpha[15] = ;

bool idx[15][2] = ;

int count = 0;

int solve()

else}}

if (res == 0)

}void dfs(int i, int j, int k)

idx[i][j] = true; //idx標記訪問過的陣列

alpha[k - 1] = mapalpha[i][j];

if (k == 15) //當搜尋到乙個字串時檢視剩餘酒量

for (int x = 0; x <= 1; x++)}}

}int main()

else}}

dfs(0, 0, 1); //初始遍歷位置

dfs(0, 1, 1);

cout

<<"count: "

0;}

正確的思路

// 2017/3/13

#include

using

namespace

std;

char chr[15];

int count = 0;

//處理dfs搜尋的字串,有坑

void solve()

} else

if (chr[i] == 'b')}}

if (res == 0 && chr[14] == 'b' && ok)

}void dfs(int store, int flower, int k)

if (store == 5 && flower == 10 && k == 15) //最後一次返回條件,返回乙個遍歷後的字串

chr[k] = 'a'; //二叉樹的左側分叉

dfs(store + 1, flower, k + 1);

chr[k] = 'b'; //二叉樹的右側分叉

dfs(store, flower + 1, k + 1);

}int main()

李白打酒 DFS

話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...

藍橋杯 李白打酒 DFS

話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...

藍橋杯 李白打酒 (dfs)

話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...