| ||||||||||
| 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 | |||||||||
BFS能过吗?我的为什么还超时,请牛人指点!谢谢!#include <stdio.h>
#include <string.h>
#define MAXN 131100
int mat[MAXN];
int queue[MAXN];
int father[MAXN];
int path[MAXN];
int op[MAXN];
int main()
{
char map[6][6];
int t,count,top,tmp,i,j,k,p,f;
t=0;
count=0;
for(i=0;i<4;i++)
{
scanf("%s",map[i]);
for(j=0;j<4;j++)
{
if(map[i][j]=='+') t+=(1<<count);
count++;
}
}
if(t==0) printf("0\n");
else
{
top=0;
queue[0]=t;
father[0]=-1;
memset(mat,0,sizeof(mat));
mat[t]=1;
f=0;
for(i=0;i<=top;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
tmp=queue[i];
for(p=j*4;p<j*4+4;p++) tmp^=(1<<p);
for(p=k;p<16;p+=4)
{
if(p/4==j) continue;
tmp^=(1<<p);
}
if(!mat[tmp])
{
top++;
queue[top]=tmp;
father[top]=i;
path[top]=j*4+k;
mat[tmp]=1;
if(tmp==0) f=1;
}
if(f) break;
}
if(f) break;
}
if(f) break;
}
count=-1;
while(top>0)
{
count++;
op[count]=path[top];
top=father[top];
}
printf("%d\n",count+1);
for(i=count;i>=0;i--) printf("%d %d\n",op[i]/4+1,op[i]%4+1);
}
//while(1);
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator