| ||||||||||
| 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 | |||||||||
I am crazy! help 如何不超时?#include<stdio.h>
int key[102][12];
char map[102][12];
int max=0;
int n,m;
int check(int i,int j)
{ if(map[i][j]=='P'&&key[i][j]==0)
{if(j>=1)
if(key[i][j-1]==1)
return 0;
if(j>=2)
if(key[i][j-2]==1)
return 0;
if(j+1<=m-1)
if(key[i][j+1]==1)
return 0;
if(j+2<=m-1)
if(key[i][j+2]==1)
return 0;
if(i>=1)
if(key[i-1][j]==1)
return 0;
if(i>=2)
if(key[i-2][j]==1)
return 0;
if(i+1<=n-1)
if(key[i+1][j]==1)
return 0;
if(i+2<=n-1)
if(key[i+2][j]==1)
return 0;
return 1;
}
else return 0;
}
void put(int k,int hang,int lie)
{
int i,j;
i=hang;
for(j=lie;j<=m-1;j++)
if(check(i,j))
{key[i][j]=1;put(k+1,i,j);key[i][j]=0;}
for(i=hang+1;i<=n-1;i++)
for(j=0;j<=m-1;j++)
if(check(i,j))
{key[i][j]=1;put(k+1,i,j);key[i][j]=0;}
if(i>n-1&&j>m-1)
if(max<k)
{max=k;return;}
}
int main()
{ int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<=n-1;i++)
scanf("%s",map[i]);
for(i=0;i<=n-1;i++)
for(j=0;j<=m-1;j++)
key[i][j]=0;
put(0,0,0);
printf("%d\n",max);
getchar();
getchar();
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator