新手天翼
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
int ex,ey,sx,sy,x;
int a[13][13];
bool map[13][13];
int dir[10][2]={{0,0},{0,1},{1,0},{0,-1},{-1,0},{-1,1},{-1,1},{1,1},{-1,-1}};
bool f=false;
int n,m;
int s[110][2];
int su,fu;
void search(int x, int y)
{
if(x==ex&&y==ey)
{
su++;
for(int i=1; i<=8; i++)
{
int nx = dir[i][0],ny = dir[i][1];
if( nx>=1 && nx<=m && ny>=1 && ny<=n&& map[nx][ny]!=false&& a[nx][ny]!=1 )
{
map[nx][ny]=true;
search(nx, ny);
map[nx][ny]=false;
}
}
}
for(int i=1; i<=8; i++)
{
int nx = dir[i][0],ny = dir[i][1];
if( nx>=1 && nx<=m && ny>=1 && ny<=n&& map[nx][ny]!=false&& a[nx][ny]!=1 )
{
map[nx][ny]=true;
search(nx, ny);
map[nx][ny]=false;
}
}
}
int main()
{
cin>>n;
m=n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cin>>a[i][j];
}
ex=1,ey=1,sx=1,sy=n;
search(ex,ey);
cout<<su;
return 0;
}
//为什么连测试数据都过不了???
@沈吴敏
新手天翼
问题挺多的:
1. search里终点的判断的条件不对
2. dir数组有问题
3. su++后应该回溯,不是继续搜索
4. 起点在搜索前要标记为已走
5. nx ny算的不对
6. 判断某个位置能否走不对(map[nx][ny]!=false)
你再仔细考虑考虑