这个题和上一题类似,都是回溯,用的方法基本上相同了,其实我是先做得得这道题,回溯+递归,深度优先遍历,是看了别人的代码才写出来的,明天继续练吧,深搜
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int map[12][12];
int step[4][2]={1,0,-1,0,0,1,0,-1};
int m,n,ok;
int travel()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!map[i][j])
return 0;
return 1;
}
void dfs(int x,int y)
{
map[x][y]=1;
int i,a,b;
if(travel())
{
ok=1;
return;
}
for(i=0;i<4;i++)
{
a=x+step[i][0];
b=y+step[i][1];
if(a>=1&&b>=1&&a<=n&&b<=m&&!map[a][b])
dfs(a,b);
}
if(!ok)
map[x][y]=0;
return;
}
int main()
{
int i,j,flag,flag1;
char t;
while(scanf("%d%