演算法競賽高階指南,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開始之前把所有...