【輸入樣例】
3 40001
0011
0110
【輸出樣例】
3 2 1 0
2 1 0 0
1 0 0 1
【資料範圍及提示】
對於30%的資料,n*m<=10000;
對於100%的資料,n*m<=182^2.
【解題思路】
之前的思路不太對啊。。每找到乙個0就廣搜一遍。。明顯超時(⊙o⊙)…
然而反向思維就是正解了。。。
由題目描述可以知道dis[i,j]其實就是點(i,j)到離他最近的那個為1的點的最小步數,這一類問題就是經典的廣搜問題;
首先尋找值為1的點,把他們如佇列;
然後從佇列首開始掃,每次擴充套件佇列中元素周圍的四個點,如果是0就入佇列,步數是頭指標+1;
這樣就很容易求出答案;
queue[i][0]為佇列中第i個元素的橫座標;
queue[i][1]為佇列中第i個元素的縱座標;
queue[i][2]為佇列中第i個元素的dis,也就是最小步數;
【**】
#include#include#include#includeusing namespace std;
int sx[4]=;
int sy[4]=;
int queue[40000][3];
int n,m,head,tail,i,j,a[2000][2000],dis[2000][2000],x,y;
char ss[2000];
int main()
} }while (head0&&y>0&&x<=n&&y<=m&&a[x][y]==0)//判斷是否越界以及是否為0
}} for (i=1;i<=n;++i)
return 0;
}
【心得】
有的時候需要逆向思維。。。就差那麼一點點。、
TYVJ 1081 最近距離 解題報告
怎麼講。純水題吧,隨便搜一下就可以了。不過搜法也有很多,我第一次寫的是直接求距離,因為要開平方,又是o n 2 的複雜度,所以沒超時。但是最後乙個資料293ms,有點危險,看了下題解,有好方法,直接使用x 2 y 2,不開平方,畢竟就是比較距離嘛!寫出來的那個 全部wa了,不知道怎麼回事,好睏了,明...
守望者的逃離解題報告
problem i 守望者的逃離 noip2007 time limit 1000ms memory limit 65536k total submit 96 accepted 66 description 問題描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在...
解題報告 01揹包
這應該是最基礎的揹包問題了,但正因為他的基礎,他的思想會被用在很多dp題中,所以這裡有必要對他剖析一下。我們應該掌握的方法有兩種 1 二維陣列。2 滾動陣列。後面那個一看就要高階一些,但是確實對動歸沒有太大的幫助,所以大家一定要把第一種方法學好!第二種方法我不做解釋,只會黏貼 大家認真腦補一下應該也...