給出五子棋殘局,判斷三步內是否能分出勝負,玩家為當前該走旗子的顏色,下一步為白棋或黑棋不定。
按照順序判斷即可:
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都沒用到,也許模擬中有點搜尋吧。還是類似方格的東西把外圍也設定成未標記要好的多,做題多了也許就有這種感覺了吧。...