洛谷 題解 P1225 黑白棋遊戲

2022-02-13 21:59:44 字數 1562 閱讀 2379

看見很多dalao寫了什麼雙向bfs,蒟蒻表示不會寫啊。

怎麼辦辦?

先來分析一下題目,一眼看去就是乙個搜尋題,考慮dfs與bfs。

先放乙份dfs的**:

#includeusing namespace std;

bool a[5][5],b[5][5];

char c;

int dx[5]=;

int dy[5]=;

int ans=0x3f3f3f3f;

int ax[110],bx[110],ay[110],by[110];

int ansx1[110],ansx2[110],ansy1[110],ansy2[110];

int cnt=0,ans_cnt;

mapmp;

inline string get()

inline bool check()

inline void dfs(int x,int y,int tot)

}if(y==5)return;

if(x==5)x=1,y++;

/*string s=get();

cout<4||bb<1||bb>4||a[aa][bb]==a[x][y])continue;

cnt++;

ax[cnt]=x;ay[cnt]=y;

bx[cnt]=aa;by[cnt]=bb;

swap(a[aa][bb],a[x][y]);

dfs(x+1,y,tot+1);

cnt--;

swap(a[aa][bb],a[x][y]);

}}int main()

for(int i=1;i<=4;i++)

for(int j=1;j<=4;j++)

dfs(1,1,0);

cout《這裡列舉每乙個點,進行上下左右的交換。看上去很(fei)有(chang)道(che)理(dan)的樣子,但是很明顯,有時候交換完下面的點還可以去交換上面的點,所以有時候會搜不到答案,只能拿到60分

藍題能拿60分也很不錯了呢

怎麼辦辦?

那麼當然要用bfs啦,(蒟蒻不會記錄方案的好辦法,只能暴力儲存啦)

#includeusing namespace std;

bool a[5][5],b[5][5];

char c;

int dx[5]=;

int dy[5]=;//上下左右

int ans=0x3f3f3f3f;

int ansx1[100],ansx2[100],ansy1[100],ansy2[100];

mapmp;//剪枝專用

struct node

;inline void bfs()}}

}}int main()

for(int i=1;i<=4;i++)

for(int j=1;j<=4;j++)

bfs();

cout

return 0;

}

洛谷P1225 數樓梯

樓梯有n階,上樓可以一步上一階,也可以一步上二階。編乙個程式,計算共有多少種不同的走法。乙個數字,樓梯數。走的方式幾種。輸入 4輸出 5 60 n 50 100 n 5000 下面正式進入這道題的題解 我今天寫了兩篇題解 都很水 這道題的話似乎有很多種方法,只是我見過的就好幾種 這裡就像大家推薦兩種...

洛谷 P1259 黑白棋子的移動

題目鏈結 遞迴 分治 打表 這題.一上來讓我有點兒蒙啊.但其實就在於找規律,舉幾個例子自己動手寫一下就恍然大悟了。比如這樣 當然,題目條件是4 n 100 只需要先將中間緊挨的黑白棋子和空格交換,再將最後兩個黑色棋子與空格交換就好啦!之後就很歡快地去敲鍵盤了!結果全部wa掉。然後才知道我畫的每個例子...

洛谷 p1080國王遊戲 題解

include include include include include p1080 國王遊戲 輸入1 大臣數n 2 國王左手數 國王右手數 3 n 2 大臣左手數 大臣右手數 輸出 獲得金幣最多的大臣獲得金幣數量 using namespace std int king left 0,kin...