A ACM小組的古怪象棋

2021-08-19 14:41:21 字數 1074 閱讀 5777

acm小組的samsara和staginner對中國象棋特別感興趣,尤其對馬(可能是因為這個棋子的走法比較多吧)的使用進行深入研究。今天他們又在 構思乙個古怪的棋局:假如samsara只有乙個馬了,而staginner又只剩下乙個將,兩個棋子都在棋盤的一邊,馬不能出這一半棋盤的範圍,另外這 一半棋盤的大小很奇特(n行m列)。samsara想知道他的馬最少需要跳幾次才能吃掉staginner的將(我們假定其不會移動)。當然這個光榮的任 務就落在了會程式設計的你的身上了。

每組資料一行,分別為六個用空格分隔開的正整數n,m,x1,y1,x2,y2分別代表棋盤的大小n,m,以及將的座標和馬的座標。(1<=x1,x2<=n<=20,1<=y1,y2<=m<=20,將和馬的座標不相同)

輸出對應也有若干行,請輸出最少的移動步數,如果不能吃掉將則輸出「-1」(不包括引號)。

8 8 5 1 4 5

3

solve()函式的search_path()因為放在了if語句後面wa十多次,應先更新棋盤狀態

#include#includeusing std::min;

const int max = 25;

const int inf = 5000;

int board[max][max]; //最少步數

int visit[max][max]; //0未訪問,1已訪問

int n = 0, m = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;

//以點(x,y)為中心尋找周圍八個點,注意卡馬腳情況

void search_path(int x, int y)

void solve(int x, int y)

int main()

}board[x2][y2] = 0;

solve(x2, y2);

if (board[x1][y1] == inf)

printf("-1\n");

else

printf("%d\n", board[x1][y1]);

}return 0;

}

ACM小組的古怪象棋

acm小組的samsara和staginner對中國象棋特別感興趣,尤其對馬 可能是因為這個棋子的走法比較多吧 的使用進行深入研究。今天他們又在 構思乙個古怪的棋局 假如samsara只有乙個馬了,而staginner又只剩下乙個將,兩個棋子都在棋盤的一邊,馬不能出這一半棋盤的範圍,另外這 一半棋盤...

COJ 1224 ACM小組的古怪象棋

大概是以後一定要注意輸入輸出 比如 題目最小給的座標是從 1,1 開始的 那再去判斷是否陣列越界的時候 就需要特別注意了 道理我懂 然後因為這個問題以及在給輸入座標減1的時候 一不小心把m,n也算進去了 然後就炸了我乙個小時 雞今天打rank的第一道也是這樣 拿到題目我考慮到了行 卻沒有考慮到列 炸...

coj 1224 ACM小組的古怪象棋

acm小組的samsara和staginner對中國象棋特別感興趣,尤其對馬 可能是因為這個棋子的走法比較多吧 的使用進行深入研究。今天他們又在 構思乙個古怪的棋局 假如samsara只有乙個馬了,而staginner又只剩下乙個將,兩個棋子都在棋盤的一邊,馬不能出這一半棋盤的範圍,另外這 一半棋盤...