HDU 3683 模擬 搜尋

2021-06-26 06:02:31 字數 1052 閱讀 6633

給出五子棋殘局,判斷三步內是否能分出勝負,玩家為當前該走旗子的顏色,下一步為白棋或黑棋不定。

按照順序判斷即可:

1:判斷棋盤是否合法,並確定玩家顏色

2:判斷當前玩家顏色是否有乙個必勝點,有玩家則在第一步勝

3:判斷另一方在當前是否有兩個必勝點,若有,則玩家在第二步失敗

4:bfs出玩家是否存在此方案:任意放置乙個位置的前提下,另一方沒有必勝點,且玩家有兩個必勝點,則玩家在第三步勝

5:否則3步內無法分出勝負

#include "stdio.h"

#include "string.h"

int dir[4][2]=,,,};

int map[21][21];

int ans_x,ans_y;

int ok1(int key)

x=i;y=j;

while (1)

if (sum>=5) }}

return -1;

}int ok2(int key)

x=i; y=j;

while (1)

if (sum>=5)

}if (ok==2) return 1;

}return -1;

}int bfs(int key)

map[i][j]=-1;

}return -1;

}int main()

if (blk==wt) first=1;

else

if (blk==wt+1) first=0;

else

ans=ok1(first); // 第一步存在必勝點

if (ans==1)

ans=ok2(1-first); // 另一方存在兩個必勝點

if (ans==1)

ans=bfs(first); // 搜尋是否存在第三步定勝負

if (ans==1)

else

printf("cannot win in 3 moves.\n");

}return 0;

}

HDU 3791 二叉搜尋樹(模擬BST)

題目鏈結 problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n...

HDU 5983 模擬魔方 模擬

題意是說給定乙個 2 2 魔方的各個面的情況,問是否能轉動不超過一次使得魔方復原。思路是先在輸入的時候統計一下已完成的面數,要想以最多一次的轉動使得魔方復原,那麼已完成的面數只能是 2 面或者 6 面,此處可剪枝。若已完成 6 面,那麼一定可以復原 若已完成 2 面,則要用一次轉動完成其他六面,開始...

hdu4740 杭州網賽 模擬 有點搜尋?

當時看了這題就感覺so easy。本來不想寫的,後來感覺是不是可以練一下搜尋水平。比賽時有人過了就沒寫。比賽完了寫一下。實現還不是那麼順利,囧 本來自己以為這題能練下搜尋,其實dfs bfs都沒用到,也許模擬中有點搜尋吧。還是類似方格的東西把外圍也設定成未標記要好的多,做題多了也許就有這種感覺了吧。...