标签:des blog http io os java ar strong for
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 313 Accepted Submission(s): 151
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=111;
char maz[maxn][maxn];
int n,m;
int vis[maxn][maxn][27];
const int inf=0x7ffffff;
class node{
public:
int x,y,t,p;
node(){x=y=t=p=0;}
node (int tx,int ty,int tt,int tp):x(tx),y(ty),t(tt),p(tp){}
bool operator <(const node & n2)const {
return t>n2.t;
}
};
int isdoor(int x,int y){
if(maz[x][y]==‘#‘)return 0;
if(maz[x][y]>=‘A‘&&maz[x][y]<=‘Z‘)return maz[x][y]-‘A‘+1;
return -1;
}
int isstone(int x,int y){
if(maz[x][y]>=‘0‘&&maz[x][y]<=‘9‘)return maz[x][y]-‘0‘;
return -1;
}
bool judge(int x,int y){
if(x>=0&&x<n&&y>=0&&y<m)return true;
return false;
}
void printmaz(){
printf("maz %d %d\n",n,m);
for(int i=0;i<n;i++)printf("%s\n",maz[i]);
}
priority_queue <node >que;
const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int bfs(){
while(!que.empty())que.pop();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(isdoor(i,j)!=-1){
que.push(node(i,j,0,isdoor(i,j)));
maz[i][j]=‘*‘;
}
}
}
while(!que.empty()){
node tp=que.top();que.pop();
//printf("pack x%d y%d t%d p%d\n",tp.x,tp.y,tp.t,tp.p);
for(int i=0;i<4;i++){
int tx=tp.x+dx[i],ty=tp.y+dy[i];
if(judge(tx,ty)){
if(maz[tx][ty]==‘$‘)return tp.t;
else if(maz[tx][ty]==‘.‘){
if(vis[tx][ty][tp.p]==-1||vis[tx][ty][tp.p]>tp.t){
vis[tx][ty][tp.p]=tp.t;
que.push(node(tx,ty,tp.t,tp.p));
}
}
else if(isstone(tx,ty)!=-1){
if(vis[tx][ty][tp.p]==-1||vis[tx][ty][tp.p]>tp.t+isstone(tx,ty)){
vis[tx][ty][tp.p]=tp.t+isstone(tx,ty);
que.push(node(tx,ty,tp.t+isstone(tx,ty),tp.p));
}
if(tp.p>0&&(vis[tx][ty][tp.p-1]==-1||vis[tx][ty][tp.p-1]>tp.t)){
vis[tx][ty][tp.p-1]=tp.t;
que.push(node(tx,ty,tp.t,tp.p-1));
}
}
}
}
}
return inf;
}
int main(){
while(1){
for(n=0;(gets(maz[n]))&&strcmp(maz[n],"--")!=0&&strlen(maz[n])!=0;n++){}
if(strlen(maz[n])!=0)break;//in the end
m=strlen(maz[0]);
memset(vis,-1,sizeof(vis));
int ans;
ans=bfs();
if(ans!=inf)printf("%d\n",ans);
else puts("IMPOSSIBLE");
}
return 0;
}
快速切题 hdu2416 Treasure of the Chimp Island 搜索 解题报告
标签:des blog http io os java ar strong for
原文地址:http://www.cnblogs.com/xuesu/p/3986631.html