标签:
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; int arr[25][25]; int vis[25][25]; int v[4],r,c; int xx[]={-1,1,0,0}; int yy[]={0,0,-1,1}; struct node { int x; int y; int time; }; int bfs(node a,node b) { memset(vis,0,sizeof(vis)); queue<node>q; node cmp,tmp; a.time=0; q.push(a); while(!q.empty()) { cmp=q.front(); q.pop(); for(int i=0; i<4; i++) { tmp.x=cmp.x+xx[i]; tmp.y=cmp.y+yy[i]; if(tmp.x>=0&&tmp.x<r&&tmp.y>=0&&tmp.y<c&&arr[tmp.x][tmp.y]!=0) { if(vis[tmp.x][tmp.y]==0||cmp.time+v[arr[tmp.x][tmp.y]]<vis[tmp.x][tmp.y]) { tmp.time=cmp.time+v[arr[tmp.x][tmp.y]]; vis[tmp.x][tmp.y]=tmp.time; q.push(tmp); } } } } if(vis[b.x][b.y]!=0) { return vis[b.x][b.y]; } return -1; } int main() { #ifdef CDZSC_OFFLINE freopen("in.txt","r",stdin); #endif int i,j,len,T=1,sum; char str[25]; node begin,end; while(scanf("%d%d",&r,&c)!=EOF) { scanf("%d%d%d",&v[1],&v[2],&v[3]); for(i=0; i<r; i++) { scanf("%s",str); len=strlen(str); for(j=0; j<len; j++) { if(str[j]==‘#‘) { arr[i][j]=1; } if(str[j]==‘.‘) { arr[i][j]=2; } if(str[j]==‘T‘) { arr[i][j]=3; } if(str[j]==‘@‘) { arr[i][j]=0; } } } scanf("%d%d%d%d",&begin.x,&begin.y,&end.x,&end.y); if(begin.x==end.x&&begin.y==end.y) { printf("Case %d: %d\n",T++,0); } else { sum=bfs(begin,end); printf("Case %d: %d\n",T++,sum); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/Wing0624/p/4256243.html