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。那麼,元素在出佇列時,不能簡單的按照以前的入隊順序出隊了,而應該讓時間最短的先出隊,這樣就能夠保證先入...