| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴代码
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
bool map[180][180];
int n,m;
int stx,sty,lsx,lsy;
int cas=0;
int ans;
int sum[4][180][180];
int t[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
struct st
{
int x,y;
int f,n;
friend bool operator < (st a,st b)
{
return a.n>b.n;
}
};
priority_queue <st>q;
void bfs()
{
while(!q.empty()) q.pop();
int x,y,ti;
memset(sum,0xf,sizeof(sum));
st tmp,tp;
tmp.x=stx;tmp.y=sty;tmp.n=1;
tmp.f=0;
q.push(tmp);
tmp.f=1;
q.push(tmp);
tmp.f=2;
q.push(tmp);
tmp.f=3;
q.push(tmp);
sum[0][stx][sty]=sum[1][stx][sty]=sum[2][stx][sty]=sum[3][stx][sty]=1;
while(!q.empty())
{
tmp=q.top();q.pop();
if(tmp.x==lsx&&tmp.y==lsy)
{
ans=tmp.n;
return;
}
if(tmp.n>sum[tmp.f][tmp.x][tmp.y]) continue;
for(int i=0;i<4;i++)
{
x=tmp.x+t[i][0];
y=tmp.y+t[i][1];
if(i==tmp.f) ti=tmp.n;
else ti=tmp.n+1;
while(x>=0&&x<=n+1&&y>=0&&y<=m+1&&(!map[x][y]))
{
if(ti<sum[i][x][y])
{
sum[i][x][y]=ti;
tp.x=x;tp.y=y;
tp.f=i;tp.n=ti;
q.push(tp);
}
x+=t[i][0];
y+=t[i][1];
if(map[x][y]) break;
}
if(x==lsx&&y==lsy)
{
if(ti<sum[i][x][y])
{
sum[i][x][y]=ti;
tp.x=x;tp.y=y;
tp.f=i;tp.n=ti;
q.push(tp);
}
}
}
}
}
void init()
{
memset(map,0,sizeof(map));
char c;
int j,op=0;
while(scanf("%c",&c)==1)
{
if(c=='\n')break;
}
for(int i=1;i<=n;i++)
{
j=0;
while(scanf("%c",&c)==1)
{
j++;
if(c=='X') map[i][j]=1;
if(c=='\n') break;
}
}
printf("Board #%d:\n",++cas);
while(scanf("%d%d%d%d",&sty,&stx,&lsy,&lsx)==4&&stx)
{
printf("Pair %d:",++op);
ans=0;
bfs();
if(ans) printf(" %d segments.\n",ans);
else printf(" impossible.\n");
}
}
int main()
{
//freopen("poj.in","r",stdin);
while(scanf("%d%d",&m,&n)==2&&n&&m)
{
init();
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator