直接按照提示給出的方法做,用bfs記錄每個騎士到每個點的最小距離,在求所有的最小距離的和最小的點處,得到的即為最小和。
小ho:小hi你剛剛說到了這樣一點:放置在任何乙個初始位置的騎士,都可以通過若干次移動到達棋盤上任意乙個位置。
那麼我就可以把整個局面分開來做:我先計算出每乙個騎士到達棋盤上每個位置的最短距離;再列舉每乙個位置,表示將三個騎士在這個位置上匯合,累加這三個騎士到達的步數之和;最後選擇乙個最小的和作為解。
求解騎士到達每乙個位置最少步數時,我可以使用之前講過的寬度優先搜尋。從而保證我第一次列舉到這個位置時就是最少的步數。
注意坑點:
1.使用到三維陣列記錄最小值,其第一維長度為3,表示三個騎士;第二和三維表示棋盤。
在傳參時注意寫上第三和第二維的長度。
2.在bfs時我少加了到前一步的步數,改了許久。/(ㄒoㄒ)/~~
具體**如下:
#include
#include
#include
#include
#include
using
namespace
std;
//int ans = 10000000;
int dicx[8] = ;
int dicy[8] = ;
typedef
struct node
node;
queue
q;int step[3][10][10];
int inx[3];
int iny[3];
void bfs(int f[10][10] ,int in_x, int in_y)
}f[in_x][in_y] = 0;
node n, n;
n.x = in_x;
n.y = in_y;
while (!q.empty())
q.push(n);
while (!q.empty())}}
}int main()
// for(int i=0;i<3;i++)
//
for (int i = 0; i < 3; i++)
bfs(step[i], inx[i], iny[i]);
for (int i = 1; i <= 8; i++)}}
cout
<< ans << endl;
}return
0;}
僅代表個人觀點,歡迎交流**,勿噴~~
hiho 1308 搜尋二 騎士問題
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi 小ho你會下西洋棋麼?小ho 應該算會吧,我知道每個棋子的移動方式,馬走日象飛田什麼的.小hi 象飛田那是中國象棋啦!小ho 哦,對。西洋棋好像是走斜線來著。小hi 不過馬走日倒是對了。西洋棋中的馬一般叫做騎士,關...
二分搜尋 HihoCoder1139
題目描述 由於自己 想得太多 導致自己讀了半天題才理解了題意。我還以為索敵值會隨著每一次到達戰略點而減小,結果題意是索敵值是固定了的,並不會改變。如下是我對題目中第乙個案例的分析 每個圓圈代表乙個戰略點的編號,邊上的值代表每兩個戰略點之間所需索敵值。開始時nettle在1,他只需要3個索敵值就能到達...
白騎士的移動 搜尋
小s第一次接觸西洋棋。他發現西洋棋中的knight棋子的移動方式和中國象棋中的馬類似,移動方式如圖所示。於是小s在棋盤上隨意擺上了一些棋子,其中包括一枚白騎士 一枚黑皇后 若干黑戰車和若干黑主教。小s想知道,如何能在避開黑戰車和黑主教的攻擊範圍的前提下,花費更少的步數吃掉黑皇后。輸入格式 輸入僅包含...