Codevs 2843 拯救煒哥

2021-07-16 00:18:39 字數 1869 閱讀 3293

2843 拯救煒哥

時間限制: 2 s

空間限制: 128000 kb

題目等級 :** gold

題目描述 description

有一天,煒哥和歐能幹一起去大魔王家裡做(dao)客(luan),不巧被魔王發現了。魔王將煒哥和歐能幹抓走了,關在了兩個不同的房間裡。魔王聽說吃煒哥的肉可以長生不老(煒哥=唐僧?),於是開始準備晚飯。由於魔王疏忽,將一把鑰匙漏在了歐能幹的房間裡。歐能幹知道這個訊息後,趕緊去拯救煒哥。煒哥生命危在旦夕,歐能幹必須馬上離開這個房間,救出煒哥。於是他找到了程式設計大牛的你。

輸入描述 input description

第一行輸入兩個數字,分別代表房間的長和寬;

第二~第n+1行 輸入房間的擺設

o 代表歐能幹現在的位置;

k 代表鑰匙(key)

d 代表房間的門

. 代表空地(可以直接經過的地)

* 代表牆(不能穿過)

輸出描述 output description

乙個數:最少要走幾個格仔

如果無法逃出則輸出 no way

樣例輸入 sample input

3 3

o.k

d*.

… 樣例輸出 sample output

5 資料範圍及提示 data size & hint

1<=n,m<=1000

原創:二中蘇元實驗學校 歐寧

分類標籤 tags

廣度優先搜尋 搜尋

/*

兩遍bfs.

*/#include

#include

#define maxn 1001

using namespace std;

int dx[5]=;

int dy[5]=;

int n,m,x

0,y0,x1,y1,x2,y2,ans;

bool g[maxn][maxn],b[maxn][maxn];

struct dataq[maxn*maxn];

intread()

while(ch>='0'&&ch<='9')x=x

*10+ch-48,ch=getchar();

return

x*f;

}int bfs1(int ux,int uy,int vx,int vy)

b[x+dx[i]][y+dy[i]]=false;

q[++tail].x=x+dx[i],q[tail].y=y+dy[i];q[tail].tot=q[head].tot+1;}}

}return -1;

}int bfs2(int ux,int uy,int vx,int vy)

g[x+dx[i]][y+dy[i]]=false;

q[++tail].x=x+dx[i],q[tail].y=y+dy[i];q[tail].tot=q[head].tot+1;}}

}return -1;

}int main()

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

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

int ans1=bfs1(x

0,y0,x1,y1),ans2=bfs2(x1,y1,x2,y2);

if(ans1==-1)

else ans+=ans1;

if(ans2==-1)

else ans+=ans2;

printf("%d",ans);

return

0;}

坦克大戰(nyoj284)

題目大體意思就是,求從地圖上的y走到t的最小步數,其中s和r不能走,b要走兩步,e要走一步。測試輸入 3 4 ybeb eere sste 0 0測試輸出 8 這個題要用優先佇列,不用的話沒有辦法保證所求的步數是最小的。我也查了一些關於優先佇列的資料,做以下整理 在優先佇列中,優先順序高的元素先出佇...

NYOJ284坦克大戰

bfs求最短路,這個題走到 b 點是要花費2個時間,e 是1個時間,所以要用乙個優先佇列,優先順序就是花費小的先出隊,其餘的就是模板了。include include include using namespace std define inf 0x3f3f3f3f int stx,sty int ...

NYOJ 284 坦克大戰(BFS)

好累啊,寫篇部落格歇歇。題目背景很有趣,是大家小時候經常玩的坦克大戰,哈哈。弱弱地表示本人小時候經常玩遊戲機。此題是在迷宮問題的基礎上做了些改動,就是地圖上能走的點可能耗費時間1,也可能耗費時間2。那麼,元素在出佇列時,不能簡單的按照以前的入隊順序出隊了,而應該讓時間最短的先出隊,這樣就能夠保證先入...