程序代码:
#include <stdio.h>
#include <time.h>
#define WIDTH 5
#define HEIGHT 3
struct point
{
int x;
int y;
};
struct point moving[4] =
{
{1, 0}, //沿着x轴正向移动
{0, 1}, //沿着y轴正向移动
{-1, 0}, //沿着x轴反向移动
{0, -1}, //沿着y轴反向移动
};
int map[HEIGHT][WIDTH] = {0};
int get_xy(int M)
{
srand(time(NULL));
return rand()%M;
}
/*
*参数p表示将要标记的点 即在程序的执行当中标记1 表示已经
*遍历过 *counter表示计数器 计数器满后则程序退出。
*/
int deal(struct point p, int *counter)
{
struct point temp;
int i = 0;
//标记
map[p.y][p.x] = 1;
if (++*counter == WIDTH*HEIGHT)
{
return 1;
}
for ( ; i<4; ++i )
{
temp.x = p.x + moving[i].x;
temp.y = p.y + moving[i].y;
if (temp.x>=0 && temp.x<WIDTH &&
temp.y<HEIGHT && temp.y>=0 &&
!map[temp.y][temp.x])
{
if (deal(temp, counter))
{
printf("(%d, %d) ", temp.x, temp.y);
return 1;
}
}
}
if ( i==4 )
{
--*counter;
}
return 0;
}
int main(void)
{
int counter = 0;
struct point p;
p.x = get_xy(WIDTH);
p.y = get_xy(HEIGHT);
deal(p, &counter);
if ( counter == 15 )
{
printf("(%d, %d)\n", p.x, p.y);
}
return 0;
}
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
还有点问题
有时候没有数据输出
基本原理是 选取一个点
向四个方向搜索 如果有满足条件的点
则以满足条件的点 继续向四个方向搜索
一直继续下去 直到 全部遍历完。。。
当然四个方向的权值可以自己定。。。 顺那个方位就定那个开始或结束吧