p1443 馬的遍歷 解題記錄

2021-07-30 14:48:33 字數 1297 閱讀 5593

原題點 這裡

這是一道很適合練習寬度優先搜尋的題目。

關於本題的寬度優先搜尋,有幾個小技巧:

**如下:

#include 

#include

#include

using

namespace

std;

const

int maxn= 405;

struct unit map[maxn][maxn];

// 地圖尺寸、源點座標

int map_line, map_col, original_line, original_col;

// 初始化資料。

void init()

}}struct pos;

// 馬可以跳到的 8 個位置的座標偏移量。

pos delta[8]=,,,

,,,,

};queue

q;void bfs(int line, int col)); // 源點入隊。

map[line][col].cnt= 0; // 到達源點的步數為 0 。

map[line][col].inq= true; // 記錄源點入過隊。

while(!q.empty());

//printf("center: %d %d, near: %d %d\n", pnow.line, pnow.col, pnear.line, pnear.col);

// 判斷該點下標是否合法。

if(pnear.line<1 || pnear.line>map_line || pnear.col<1 || pnear.col>map_col) continue;

// 合法則獲取相應 unit 引用。

unit &unear= map[pnear.line][pnear.col];

// 如果入過隊則跳過。

if(unear.inq) continue;

//printf("push: %d %d, center: %d %d\n", pnear.line, pnear.col, pnow.line, pnow.col);

// 記得將入隊點的 inq 標記為 true,更新 cnt 。

q.push(pnear);

unear.cnt= unow.cnt+1;

unear.inq= true;}}

}int main()

putchar('\n');

}return

0;}

P1443 馬的遍歷

題目描述 有乙個n m的棋盤 1輸入輸出格式 輸入格式 一行四個資料,棋盤的大小和馬的座標 輸出格式 乙個n m的矩陣,代表馬到達某個點最少要走幾步 左對齊,寬5格,不能到達則輸出 1 輸入樣例 1 3 3 1 1 輸出樣例 1 0 3 2 3 1 1 2 1 4bfs題,遍歷一下所有的位置 inc...

p1443馬的遍歷

就是一道很簡單的bfs,我為了練習一下queue型別的函式,第一次沒有用陣列模擬,直接上 這道題有乙個特殊的輸出,就是輸出寬五行,學習一下。include include include include include using namespace std int n,m const int ma...

P1443 馬的遍歷

有乙個n m的棋盤 1一行四個資料,棋盤的大小和馬的座標 乙個n m的矩陣,代表馬到達某個點最少要走幾步 左對齊,寬5格,不能到達則輸出 1 331 1032 3 11 214 include include include include using namespace std int chess...