很简单的一道搜索题目,而且难度为1.但几乎没怎么写过保存路径的题目。。。所以。。。
#include <stdio.h>
#include <memory.h>
int wayx[4]={-1,0,0,1};
int wayy[4]={0,-1,1,0};
int vis[10][10];
int m,n;
int sx,sy;
int a[10][10];
long ans;
struct way
{
int xx;
int yy;
}sum[30],ansxy[30];
void
init()
{
//freopen("one1.in","r",stdin);
char s;
scanf("%d%d",&m,&n);
scanf("%c",&s);
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&s);
if(s == 'S')
{
sx = i;
sy = j;
a[i][j] = 1;
}
else if(s == '1')a[i][j]=1;
else if(s == '0')a[i][j]=0;
}
scanf("%c",&s);
}
}
void
dfs(int x,int y,int num)
{
int u,v;
sum[num].xx = x;
sum[num].yy = y;
if(num > ans)
{
memcpy(ansxy,sum,30*8);
ans = num;
}
vis[x][y]=1;
int i;
for(i=0;i<4;i++)
{
u = x + wayx[i];
v = y + wayy[i];
if(u<=n && v<= m&& u>0 && v>0 && !vis[u][v] && a[u][v])
dfs(u,v,num+1);
}
vis[x][y]=0;
}
void
write()
{
// freopen("1.out","w",stdout);
printf("%ld\n",ans);
int i;
for(i=1;i<=ans;i++)
{
printf("(%d,%d)\n",ansxy[i].xx,ansxy[i].yy);
}
}
int
main()
{
init();
dfs(sx,sy,1);
write();
return 0;
}
{
PS:
1,memcpy的用法
2,这道题目需要考虑搜索顺序
3,注意 x是行,y是列 WA了几次
4,在函数里。。。。。重新定义了与全局变量的局部变量。。。导致WA了很多次。。