迷宮類彙總

2021-08-10 14:24:23 字數 2734 閱讀 2882

#include

#include

#include

#include

using

namespace

std;

const

int dx[4]=;

const

int dy[4]=;

int g[1001][1001],f[1001][1001],d[1000005];//d陣列就是在下的優化,每種顏色對應的答案

int n,m,k,ans,cnt=1;

string c;

void init()

void dfs(int x,int y)

d[cnt]=ans;

}int main()

for(int i=1;i<=k;i++)

printf("%d\n",d[f[a][b]]);

}return

0;}

下面這種是廣搜(luogu p1141 01迷宮)

#include 

using namespace std;

struct node a[1000001];

char map[1001][1001];

int n,m,startx,starty,num,book[1001][1001],mark[1001][1001],ans[1000001];

int next[4][2]=,,,};

int bfs(int color)

}head++;

}return sum;

}int main()

for(i=1;i<=m;i++)

else

num++;

}return 0;

}

不知為何當初的自己要發以上兩篇部落格,明明很簡單的題目,發部落格就算了,結果還是別人的,真是太菜了.

背景 background

(喵星人lhx和wd同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們製造了一片幻象迷宮。)

wd:嗚嗚,腫麼辦啊……

lhx:momo…我們一定能走出去的!

wd:嗯,+u+u!

幻象迷宮可以認為是無限大的,不過它由若干個n*m的矩陣重複組成。矩陣中有的地方是道路,用』.』表示;有的地方是牆,用』#』表示。lhx和wd所在的位置用』s』表示。也就是對於迷宮中的乙個點(x,y),如果(x mod n,y mod m)是』.』或者』s』,那麼這個地方是道路;如果(x mod n,y mod m)是』#』,那麼這個地方是牆。lhx和wd可以向上下左右四個方向移動,當然不能移動到牆上。

請你告訴lhx和wd,它們能否走出幻象迷宮(如果它們能走到距離起點無限遠處,就認為能走出去)。如果不能的話,lhx就只好啟動城堡的毀滅程式了……當然不到萬不得已,他不想這麼做。。。

輸入輸出格式

輸入格式:

輸入包含多組資料,以eof結尾。

每組資料的第一行是兩個整數n、m。

接下來是乙個n*m的字元矩陣,表示迷宮裡(0,0)到(n-1,m-1)這個矩陣單元。

輸出格式:

輸出格式 outputformat

對於每組資料,輸出乙個字串,yes或者no。

輸入輸出樣例

輸入樣例#1

5

4##.#

##s#

#..#

#.##

#..#54

##.#

##s#

#..#

..#.

#.##

輸出樣例

yes

no說明

資料範圍和注釋 hint

對於30%的資料,n,m<=20

對於50%的資料,n.m<=100.

對於100%的資料,n,m<=1500,每個測試點不超過10組資料.

籠統的說,這道題就是要找一條路,可以無窮盡的走下去.也就是差不多走到某個點後,可以從這點回到原來的起點.可以看看這個大佬解釋的:

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,sx,sy,dx[4]=,dy[4]=,ans=0;

int vis[1510][1510][3]=;

bool

map[1510][1510]=;

void dfs(int x,int y,int xx,int yy) //如果這個點走過,並且不完全是和上乙個點相同,那就返回1

if(vis[xx][yy][2]&&vis[xx][yy][0]==x&&vis[xx][yy][1]==y) return ;//如果走到上乙個點,那就回溯

vis[xx][yy][0]=x;vis[xx][yy][1]=y;vis[xx][yy][2]=1;//記錄一下

register

int x1,y1;

for(register

int w=0;w<=3;++w)

}int main()

}dfs(sx,sy,sx,sy);

if(ans) cout

<<"yes"

cout

<<"no"

0;}

String類方法彙總

1.字串串聯 string concatenation var q from c in db.customers select new 語句描述 這個例子使用 運算子在形成經計算得出的客戶location值過程中將字串欄位和字串串聯在一起。2.string.length var q from p i...

C 類的彙總

1 父類的指標可以指向子類物件位址 2 想讓子類能夠重寫父類函式且能夠呼叫子類自己的同名函式,就要把函式命名為virtal虛函式,include include using namespace std class shape 形狀 class polygo public shape 多邊形 void...

聚類演算法彙總

作為無監督領域 unsupervised 乙個太過famous的演算法了,聚類 clustering 就是對大量未知標註的資料集,按照資料的內在相似性將資料集劃分為多個類別,使類別內的資料相似度較大而類別間的資料相似度較小.然而,裡面仍然有很多需要注意的地方,對於聚類本身,目前也有很多改進版本了,所...