这样的叫迭代吗。。最近多做些搜索题了要
分行分列搜 判断满足条件
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
int o[][],n,m,q,p[][];
int ans;
int judge(int x,int y)
{
int i,j,kk=;
if(o[x][y])
return ;
for(i = x- ; i>= ;i--)
if(o[i][y]||p[i][y])
break;
for(j = i- ; j>= ; j--)
if(o[j][y]||p[j][y])
{
if(p[j][y]) return ;
break;
}
for(i = y- ; i>= ;i--)
if(o[x][i]||p[x][i])
break;
for(j = i- ; j>= ; j--)
if(o[x][j]||p[x][j])
{
if(p[x][j]) return ;
break;
}
return ;
}
void dfs(int oi,int y,int v)
{
int i,flag=;
if(y>=m)
{
y = ;
dfs(oi+,y,v);
return ;
}
if(oi>=n)
{
ans = max(ans,v);
return ;
}
dfs(oi,y+,v);
if(judge(oi,y))
{
p[oi][y] = ;
dfs(oi,y+,v+);
p[oi][y] = ;
}
}
int main()
{
int i,x,y,j;
while(scanf("%d%d%d",&n,&m,&q)!=EOF)
{
memset(o,,sizeof(o));
memset(p,,sizeof(p));
ans = ;
for(i = ; i <= q ; i++)
{
scanf("%d%d",&x,&y);
o[x][y] = ;
}
dfs(,,);
printf("%d\n",ans);
}
return ;
}