标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7579 | Accepted: 2544 |
Description
Input
Output
Sample Input
3 4 YBEB EERE SSTE 0 0
Sample Output
8
Y是自己 B是砖墙(可以打破) S是铁墙(无法通过) R是河流(无法通过) T是敌人 当遇到B花费加2当遇到E花费加1
#include<stdio.h> #include<string.h> #include<queue> using namespace std; #define MAX 1100 char map[MAX][MAX]; int vis[MAX][MAX]; int x1,x2,y1,y2; int n,m; struct node { int a; int b; int cost; friend bool operator < (node a,node b) { return a.cost>b.cost; } }; void bfs() { int i,j,t; int move[4][2]={0,1,0,-1,-1,0,1,0}; node beg,end; priority_queue<node>q; beg.a=x1; beg.b=y1; beg.cost=0; q.push(beg); vis[x1][y1]=1; while(!q.empty()) { end=q.top(); q.pop(); if(end.a==x2&&end.b==y2) { printf("%d\n",end.cost); return ; } for(i=0;i<4;i++) { beg.a=end.a+move[i][0]; beg.b=end.b+move[i][1]; if(!vis[beg.a][beg.b]&&0<beg.a&&beg.a<=n&&beg.b>0&&beg.b<=m&&map[beg.a][beg.b]!=‘S‘&&map[beg.a][beg.b]!=‘R‘) { vis[beg.a][beg.b]=1; if(map[beg.a][beg.b]==‘B‘) beg.cost=end.cost+2; else beg.cost=end.cost+1; q.push(beg); } } } printf("-1\n"); } int main() { int j,i,s,t; while(scanf("%d%d",&n,&m)&&n!=0&&m!=0) { for(i=1;i<=n;i++) { getchar(); for(j=1;j<=m;j++) { scanf("%c",&map[i][j]); if(map[i][j]==‘Y‘) { x1=i;y1=j; } else if(map[i][j]==‘T‘) { x2=i;y2=j; } } } memset(vis,0,sizeof(vis)); bfs(); } return 0; }
poj 2312 Battle City【bfs+优先队列】
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4687316.html