jzoj 5781 秘密通道

2021-08-22 12:09:54 字數 2084 閱讀 8310

–開始一看,這不是走迷宮嗎,那就是bfs呀,當然是快樂gg了

誰能想到這是一道圖論題呢(反正不是本蒟蒻)

我們把每個空位和上下左右連一條長為1的邊

和上下左右的第一堵牆連一條長為與最近的牆的距離的邊

然後從起點開始,跑一遍spfa就行了

細節問題不一定相同

像找最近的牆時

可以bfs

也可以和我一樣找菱形

要看**能力呢

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=505;

int n,m;

char g[maxn][maxn];

int g[maxn][maxn];

int node;

int begin,end;

struct heheedge[maxn*maxn*8];

int e;

vector

a[maxn*maxn];

queue

q;bool isv[maxn*maxn];

int d[maxn*maxn];

int near(int x,int y)

while(y!=y)

while(x!=x)

while(y!=y)

}return step;

}void lb(int x,int y)

if(g[x+1][y]!='#')

if(g[x][y-1]!='#')

if(g[x][y+1]!='#')

int l=near(x,y);

int x=x,y=y;

while(g[x][y]!='#')

x--;

x++;

int v=g[x][y];

e++;

edge[e].u=u;

edge[e].v=v;

edge[e].l=l;

a[u].push_back(e);

x=x,y=y;

while(g[x][y]!='#')

x++;

x--;

v=g[x][y];

e++;

edge[e].u=u;

edge[e].v=v;

edge[e].l=l;

a[u].push_back(e);

x=x,y=y;

while(g[x][y]!='#')

y--;

y++;

v=g[x][y];

e++;

edge[e].u=u;

edge[e].v=v;

edge[e].l=l;

a[u].push_back(e);

x=x,y=y;

while(g[x][y]!='#')

y++;

y--;

v=g[x][y];

e++;

edge[e].u=u;

edge[e].v=v;

edge[e].l=l;

a[u].push_back(e);

}void spfa()}}

}}int main()

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

for(int j=1;j<=m;j++)

if(g[i][j]!='#')

lb(i,j);

spfa();

if(d[end]==0x3f3f3f3f)

cout

<

else

cout

0;}

SPFA JZOJ 5781 秘密通道

description 有一副n m的地圖,有n m塊地,每塊是下列四種中的一種 牆 用 表示,牆有4個面,分別是前面,後面,左面,右面。起點 用c表示,為主角的起點,是一片空地。終點 用f表示,為主角的目的地,是一片空地。空地 用 表示。其中除了牆不能穿過,其他地方都能走。主角有以下3種操作 1....

Google的秘密通道

微軟風格的入口 mac風格的入口 linux風格的入口 freebsd風格的入口 google有各種語言的版本,下面這些語言可能實在是稀罕了點兒 克林岡語入口 沒看過星際旅行嗎?政治入口 宗教入口 小豬入口 黑客專用入口 google裡還有乙個小小的彩蛋遊戲,大家自己去看吧!下面是一此更有用的彩蛋 ...

大獎賽 秘密資訊

30爆搜,60 01揹包,100折半搜尋。01揹包 dp j 表示在j錢下最多有多少種方案。dp j dp j a i 01揹包要倒推,否則會導致狀態的混亂。include include define ll long long using namespace std ll a 50 ll dp 1...