标签:des style blog http color java 使用 os

5 3 3 100 ... .E. ..Y 5 6 4 ...... ....PR ..E.PY ...ETT ....TT 2 2 100 .E EY 5 5 2 ..... ..P.. .PYP. ..P.. ..... 3 3 1 .E. EYE ...
... .E* .*Y ...*** ..**P* ..E*PY ...E** ....T* .E EY ..*.. .*P*. *PYP* .*P*. ..*.. .E. EYE .*.
bfs+优先队列,刚开始没有优化,果断超时,第二次竟然因为优先级符号TLE!!(该记得的东西真得记牢)
使用mark数组记录该点MV值大小,初始化为零,搜索时只有当从某个点到达当前点使MV变大时才把该点值更新;入队时判断该点MV值是否大于零,大于则入队。
具体看代码:
#include"stdio.h"
#include"string.h"
#include"queue"
#include"vector"
#include"algorithm"
using namespace std;
#define N 105
#define max(a,b) (a>b?a:b)
int mark[N][N],n,m,v;
int dir[4][2]={0,1,0,-1,-1,0,1,0};
char str[N][N];
struct node
{
int x,y,d;
friend bool operator<(node a,node b)
{
return a.d<b.d;
}
};
bool judge(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m)
return true;
return false;
}
bool ok(int x,int y) //判断和(x,y)相邻的是否是敌人
{
int i,u,v;
for(i=0;i<4;i++)
{
u=dir[i][0]+x;
v=dir[i][1]+y;
if(judge(u,v))
{
if(str[u][v]=='E')
return true; //是敌人
}
}
return false;
}
void bfs(int x,int y)
{
int i,t;
priority_queue<node>q;
node cur,next;
cur.x=x;cur.y=y;cur.d=v;
q.push(cur);
memset(mark,-1,sizeof(mark));
mark[x][y]=v;
while(!q.empty())
{
cur=q.top();
q.pop();
for(i=0;i<4;i++)
{
next.x=x=dir[i][0]+cur.x;
next.y=y=dir[i][1]+cur.y;
if(judge(x,y))
{
if(str[x][y]=='.'||str[x][y]=='P')
t=cur.d-1;
else if(str[x][y]=='T')
t=cur.d-2;
else if(str[x][y]=='R')
t=cur.d-3;
else
t=-1;
if(ok(x,y)&&t>0)
t=0; //战斗力减为0
if(t>0&&t>mark[x][y])
{
next.d=t;
q.push(next);
}
mark[x][y]=max(mark[x][y],t);
}
}
}
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&v);
for(i=0;i<n;i++)
{
scanf("%s",str[i]);
}
for(i=0;i<n;i++) //寻找起始位置
{
for(j=0;j<m;j++)
{
if(str[i][j]=='Y')
{
bfs(i,j);
break;
}
}
if(j<m)
break;
}
for(i=0;i<n;i++) //输出答案
{
for(j=0;j<m;j++)
{
if(mark[i][j]>=0)
{
if(str[i][j]!='P'&&str[i][j]!='Y')
printf("*");
else
printf("%c",str[i][j]);
}
else
printf("%c",str[i][j]);
}
puts("");
}
puts("");
}
return 0;
}
hdu 3345 War Chess (bfs+优先队列),布布扣,bubuko.com
标签:des style blog http color java 使用 os
原文地址:http://blog.csdn.net/u011721440/article/details/38350741