标签:des style blog http color os
Description

Input
Output
Sample Input
5 6 4 4 1 4 2 3 2 3 1 3 2 3 3 3 3 4 4 4 4 2 3 1 3 1 4 2 4 4 2 1 2 2 3 4 4 2 0 0 0
Sample Output
Case 1: 9 Case 2: -1
Hint
Source
思路:从头部开始想尾部走,不同方向代表不同的值,就得到蛇的状态,然后就是普通的BFS,还要注意不能咬到自己,首尾相连也不行。
#include <stdio.h>
struct S{
int step,x[9],y[9],head;
}que[1000000];
bool vis[20][20][16384];
int mp[20][20],nxt[4][2]={{1,0},{0,-1},{0,1},{-1,0}},mi[8]={1,4,16,64,156,1024,4096,16384};
int main()
{
int n,m,l,i,j,k,x,y,head,temp,lx,ly,tl,valx,valy,casenum=1,top,bottom;
while(~scanf("%d%d%d",&n,&m,&l) && n)
{
for(i=0;i<l;i++)
{
scanf("%d%d",&x,&y);
que[0].x[i]=x-1;
que[0].y[i]=y-1;
}
for(i=0;i<n;i++) for(j=0;j<m;j++) mp[i][j]=1;
for(i=0;i<n;i++) for(j=0;j<m;j++) for(k=0;k<mi[l-1];k++) vis[i][j][k]=0;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&x,&y);
mp[x-1][y-1]=0;
}
que[0].step=0;
que[0].head=0;
top=0;
bottom=1;
while(top<bottom)
{
if(!que[top].x[que[top].head] && !que[top].y[que[top].head])
{
printf("Case %d: %d\n",casenum++,que[top].step);
break;
}
head=que[top].head-1;
if(head==-1) head=l;
que[top].step++;
for(i=0;i<4;i++)
{
x=que[top].x[head]=que[top].x[que[top].head]+nxt[i][0];
y=que[top].y[head]=que[top].y[que[top].head]+nxt[i][1];
if(x>=0 && x<n && y>=0 && y<m && mp[x][y])
{
temp=0;
lx=x;
ly=y;
tl=0;
for(j=que[top].head;tl<l;j++)
{
if(j==l+1) j=0;
if(que[top].x[j]==x && que[top].y[j]==y) break;//如果会咬到自己
if(tl<l-1)//计算状态
{
valx=lx-que[top].x[j];
valy=ly-que[top].y[j];
if(valx==0 && valy==1) temp=temp<<2;
else if(valx==1 && valy==0) temp=temp<<2|1;
else if(valx==-1 && valy==0) temp=temp<<2|2;
else if(valx==0 && valy==-1) temp=temp<<2|3;
lx=que[top].x[j];
ly=que[top].y[j];
}
tl++;
}
if(tl==l && !vis[x][y][temp])//如果不会咬到自己并且该状态没有访问过
{
vis[x][y][temp]=1;
que[top].head--;
if(que[top].head==-1) que[top].head=l;
que[top].x[head]=x;
que[top].y[head]=y;
que[bottom++]=que[top];
que[top].head++;
if(que[top].head==l+1) que[top].head=0;
}
}
}
top++;
}
if(top==bottom) printf("Case %d: -1\n",casenum++);
}
}
POJ-1324-Holedox Moving(BFS),布布扣,bubuko.com
标签:des style blog http color os
原文地址:http://blog.csdn.net/faithdmc/article/details/37296101