标签:operator play new printf The 而不是 bottom only ret
Input
Output
Sample Input
Sample Output
memset将每个字节置为00000001,而不是00000000。
优先队列:b.ccount放在a.ccount前。#include <iostream> #include <cstdio> #include<cstring> #include<queue> using namespace std; const int maxn = 205; char sta[maxn][maxn]; int vis[maxn][maxn]; int dir[4][2]= {1,0,-1,0,0,1,0,-1}; int n,m,x2,y2; struct state { int x; int y; int ccount; friend bool operator<(state a,state b) { return b.ccount < a.ccount; } }; int check(int x,int y) { if(x<0 || y<0 || x>=n || y>=m || !vis[x][y] || sta[x][y] == ‘#‘) return 1; else return 0; } int bfs(int x,int y) { int i; priority_queue<state>p; struct state next,t; t.x=x; t.y=y; t.ccount=0; p.push(t); vis[x][y]=0; while(!p.empty()) { t=p.top(); p.pop(); if(t.x==x2&&t.y==y2) { return t.ccount; } for(i=0; i<4; i++) { next=t; next.x+=dir[i][0]; next.y+=dir[i][1]; if(check(next.x,next.y)) continue; next.ccount++; if(sta[next.x][next.y]==‘x‘) next.ccount++; if(vis[next.x][next.y]>=next.ccount) { vis[next.x][next.y]=next.ccount; p.push(next); } } } return -1; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { int i,j,x1,y1,ans; for(i=0; i<n; i++) { for(j=0; j<m; j++) { scanf(" %c",&sta[i][j]); } } for(i=0; i<n; i++) { for(j=0; j<m; j++) { if(sta[i][j]==‘r‘) { x1=i; y1=j; } else if(sta[i][j]==‘a‘) { x2=i; y2=j; } } } memset(vis,1,sizeof(vis)); ans=bfs(x1,y1); if(ans==-1) printf("Poor ANGEL has to stay in the prison all his life.\n"); else printf("%d\n",ans); } return 0; }
标签:operator play new printf The 而不是 bottom only ret
原文地址:https://www.cnblogs.com/coder-tcm/p/8933526.html