01距離 解題報告

2021-07-04 15:02:58 字數 1032 閱讀 9525

【輸入樣例】

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 滾動陣列。後面那個一看就要高階一些,但是確實對動歸沒有太大的幫助,所以大家一定要把第一種方法學好!第二種方法我不做解釋,只會黏貼 大家認真腦補一下應該也...