| ||||||||||
| 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 | |||||||||
WA的不行了,大牛们救救我吧。。贴代码# include <stdio.h>
# include <stdbool.h>
int w,h,t;
struct refer
{
int t;
int lx,ly;
int rx,ry;
}data[102];
struct point
{
int x,y;
int t;
}res[102];
bool map[102][101][101];
bool tmap[102][101][101];
int num;
void printmap()
{
int i,j,k;
for(i=1;i<=t;i++)
{
for(j=1;j<=h;j++)
{
for(k=1;k<=w;k++)
printf("%d",map[i][k][j]);
printf("\n");
}
printf("\n\n");
}
system("pause");
}
void setmap1(int now,int lx,int ly,int rx,int ry)
{
if(rx>=lx&&ry>=ly&&now<=t&&now>=1)
{
int i,j;
for(i=lx;i<=rx;i++)
for(j=ly;j<=ry;j++)
map[now][1][j]=0;
setmap1(now+1,lx+1,ly+1,rx-1,ry-1);
}
else return;
}
void setmap2(int now,int lx,int ly,int rx,int ry)
{
if(rx>=lx&&ry>=ly&&now<=t&&now>=1)
{
int i,j;
for(i=lx;i<=rx;i++)
for(j=ly;j<=ry;j++)
map[now][i][j]=0;
setmap2(now-1,lx+1,ly+1,rx-1,ry-1);
}
else return;
}
int chk(int now,int *x,int *y)
{
int i,j,count=0;
for(i=1;i<=w;i++)
for(j=1;j<=h;j++)
if(map[now][i][j])
{
if(count>1) return 0;
count++;
*x=i;
*y=j;
}
if(count==0) return -1;/*无法从本状态到下个状态*/
else return 1;/*只有一条通路到下个状态*/
}
bool canfind(int i,int j,int now)
{
if(map[now][i][j]) return 1;
if(i+1<=w&&map[now][i+1][j]) return 1;
if(i-1>=1&&map[now][i-1][j]) return 1;
if(j+1<=h&&map[now][i][j+1]) return 1;
if(j-1>=1&&map[now][i][j-1]) return 1;
return 0;
}
void resetmap(int now)
{
int i,j;
for(i=1;i<=w;i++)
for(j=1;j<=h;j++)
if(map[now][i][j])
{
if(canfind(i,j,now-1)&&canfind(i,j,now+1)) tmap[now][i][j]=1;
}
}
bool check()
{
int i,j,k;
for(k=1;k<=t;k++)
for(i=1;i<=w;i++)
for(j=1;j<=h;j++)
if(map[k][i][j]!=tmap[k][i][j])
return 0;
return 1;
}
int main()
{
int casenum=1;
while(1)
{
scanf("%d %d %d",&w,&h,&t);
memset(map,1,sizeof(map));
if(!w&&!h&&!t) break;
int i,j;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
scanf("%d %d %d %d %d",&data[i].t,&data[i].lx,&data[i].ly,&data[i].rx,&data[i].ry);
}
/*-------------------buildmap----------------------------------*/
for(i=1;i<=num;i++)
{
setmap1(data[i].t,data[i].lx,data[i].ly,data[i].rx,data[i].ry);
setmap2(data[i].t,data[i].lx,data[i].ly,data[i].rx,data[i].ry);
}
/*-------------------judge-------------------------------------*/
memset(tmap,0,sizeof(tmap));
while(1)
{
for(i=1;i<=t;i++) resetmap(i);
if(check()) break;
int k;
for(k=1;k<=t;k++)
for(i=1;i<=w;i++)
for(j=1;j<=h;j++)
map[k][i][j]=tmap[k][i][j];
memset(tmap,0,sizeof(tmap));
}
int count=0;
bool flag=1;
for(i=1;i<=t;i++)
{
int x,y;
int jud=chk(i,&x,&y);
if(jud==1)
{
res[++count].x=x;
res[count].y=y;
res[count].t=i;
}
else if(jud==-1)
{
flag=0;
break;
}
}
printf("Robbery #%d:\n",casenum++);
if(!flag) printf("The robber has escaped.\n\n");
else if(!count) printf("Nothing known.\n\n");
else
{
for(i=1;i<=count;i++)
printf("Time step %d: The robber has been at %d,%d.\n",i,res[i].x,res[i].y);
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