hihoCoder搜尋二 騎士問題 暴力法

2021-07-13 16:11:55 字數 1362 閱讀 3724

直接按照提示給出的方法做,用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想知道,如何能在避開黑戰車和黑主教的攻擊範圍的前提下,花費更少的步數吃掉黑皇后。輸入格式 輸入僅包含...