HDU 3345 - War Chess
2017-04-05 23:06
363 查看
#include<cstdio> #include<queue> #include<cstring> using namespace std; int n,m,mv;char map[103][103];bool vis[103][103]; struct type{ int i,j,mv; bool operator<(const type &oth)const { return mv<oth.mv; } }st; int di[4]={0,-1,0,+1}; int dj[4]={+1,0,-1,0}; bool isout(int i,int j){ if(i<1 || i>n || j<1 || j>m) return true; else return false; } bool is_near_enemy(int i,int j){ for(int k=0;k<4;k++){ type next; next.i=i+di[k],next.j=j+dj[k]; if(!isout(next.i,next.j) && map[next.i][next.j] == 'E') return true; } return false; } void bfs() { priority_queue<type> q; type now,next; memset(vis,0,sizeof(vis)); q.push(st);vis[st.i][st.j]=1; while(!q.empty()) { now=q.top();q.pop(); if(now.mv<=0) continue; for(int k=0;k<4;k++) { next.i=now.i+di[k] , next.j=now.j+dj[k] , next.mv=now.mv; if(vis[next.i][next.j] || isout(next.i,next.j) || map[next.i][next.j]=='E' || map[next.i][next.j] == '#') continue; if(map[next.i][next.j]=='.') next.mv--; else if(map[next.i][next.j]=='T') next.mv-=2; else if(map[next.i][n a902 ext.j]=='R') next.mv-=3; else if(map[next.i][next.j]=='P') next.mv--; if(next.mv<0) continue; if(is_near_enemy(next.i,next.j)) next.mv=0; if(map[next.i][next.j] != 'P') map[next.i][next.j]='*'; vis[next.i][next.j]=1;q.push(next); } } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&mv); for(int i=1;i<=n;i++){ scanf("%s",map[i]+1); for(int j=1;j<=m;j++) if(map[i][j]=='Y') st.i=i , st.j=j , st.mv=mv; } bfs(); for(int i=1;i<=n;i++){ printf("%s\n",map[i]+1); } printf("\n"); } }
相关文章推荐
- hdu-3345-War Chess(bfd,条件众多)
- hdu 3345 War Chess
- HDU 3345 War Chess (优先队列)
- hdu 3345 War chess(bfs)
- hdu 3345 War Chess(BFS 判断条件稍多,有陷阱)
- hdu 3345 War Chess(BFS+模拟)
- hdu 3345 War Chess(广搜,用不用优先队列都可以)
- HDU - 3345 War Chess (记忆化搜索bfs+优先队列)
- hdu 3345 War Chess (bfs+优先队列)
- HDU 3345 war chess(bfs + 优先队列)
- HDU 3345 War Chess
- hdu 3345 war chess
- hdu 3345 War Chess(bfs)
- HDU 3345 War Chess (BFS)
- HDU - 3345 - War Chess
- hdu 3345——War Chess
- hdu 3345
- hdu 3345
- War Chess HDU - 3345
- hdu 3345 bfs