CH 2501 矩陣距離(高階指南,廣搜)

2021-10-06 13:32:35 字數 964 閱讀 5326

演算法競賽高階指南,115 頁, 廣搜的常規題目

本題要點:

1、用 pair 儲存座標點(x和y座標), 先把矩陣a中的 1 點的曼哈頓距離設定為0, 其餘的點設定為無窮大

2、先把所有的 曼哈頓距離為0的點(x, y)加入佇列queue,然後其上下左右四個座標點(x + dx[i], y + dy[i]) ,

如果不超出範圍,並且距離能更新為乙個更小的值,就更新該點(x + dx[i], y + dy[i]),並把它加入佇列中;

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1010

;int n, m;

int dx[4]

=;int dy[4]

=;char s[maxn]

[maxn]

;int d[maxn]

[maxn]

;queueint,

int>

> q;

void

bfs()}

}int a, b;

pair<

int,

int> pii;

while

(!q.

empty()

)}}}

intmain()

bfs();

for(

int i =

0; i < n;

++i)

else}}

return0;

}/*3 40001

0011

0110

*//*

3 2 1 0

2 1 0 0

1 0 0 1

*/

CH2501 矩陣距離

參考演算法竟賽高階指南 李煜東 本題可以看做一道有多個起始點的flood fill問題,把第乙個矩陣中的每個1都看作是乙個起始點,整個矩陣都可以通行,對於每個位置,在從任何乙個起點出發都可以到達的情況下,求到達該位置的最小步數 即距離該位置最近的起點的距離 在這樣的問題中,可以在bfs開始之前把所有...