自动寻路递归寻找
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//数据层,存储数据
int a[10][10] = {
{1,0,2,0,0,0,0,0,0,0},
{ 0,0,2,2,0,0,0,0,0,0 },
{ 0,0,0,0,2,0,0,0,0,0 },
{ 0,0,2,0,0,2,0,0,0,0 },
{ 0,0,2,0,0,0,2,2,2,2 },
{ 0,0,2,0,0,0,0,0,0,0 },
{ 0,0,2,2,0,0,0,2,0,2 },
{ 0,0,0,2,0,0,0,2,0,0 },
{ 0,0,0,0,2,2,0,2,2,0 },
{ 0,0,0,0,0,0,2,2,0,0 }
};
int iplayer=0;
int jplayer =0;
int ci = 0;
//View 视图,显示数据
void show(int a[10][10]) {
printf("%d-----------------------------\n",++ci);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%2d", a[i][j]);
}
printf("\n");
}
}
//控制层
void run(char ch) { //'w' 's' 'a' 'd'
switch (ch)
{
case 'a':
if (jplayer - 1 >= 0 && a[iplayer][jplayer - 1]<2) {
int temp = a[iplayer][jplayer - 1];
a[iplayer][jplayer - 1] = a[iplayer][jplayer];
a[iplayer][jplayer] = temp; // 交换
jplayer -= 1;
}
break;
case 'd':
if (jplayer + 1 <= 9 && a[iplayer][jplayer + 1] < 2) {
int temp = a[iplayer][jplayer + 1];
a[iplayer][jplayer + 1] = a[iplayer][jplayer];
a[iplayer][jplayer] = temp; // 交换
jplayer += 1;
}
break;
case 'w':
if (iplayer - 1 >= 0 && a[iplayer - 1][jplayer] < 2) {
int temp = a[iplayer-1][jplayer];
a[iplayer-1][jplayer] = a[iplayer][jplayer];
a[iplayer][jplayer] = temp; // 交换
iplayer -= 1;
}
break;
case 's':
if (iplayer + 1 <= 9 && a[iplayer + 1][jplayer] <2) {
int temp = a[iplayer + 1][jplayer];
a[iplayer + 1][jplayer] = a[iplayer][jplayer];
a[iplayer][jplayer] = temp; // 交换
iplayer += 1;
}
break;
default:
break;
}
show(a);//控制完成后,显示
}
//AI 层
void AIout(int a[10][10],int i,int j) {
a[i][j] = 3;//走过的路
show(a);
//Sleep(1000);
if (i == 9 && j == 9) {
printf("小伙子恭喜走出来了");
return;
}
else {
//左,下,右,上
if (j+1<=9 && a[i][j+1]<2) {
AIout(a, i, j + 1);
}
if (i + 1 <= 9 && a[i + 1][j]<2) {
AIout(a, i+1, j);
}
if (j - 1 >= 0 && a[i][j - 1]<2) {
AIout(a, i, j - 1);
}
if (i - 1 >= 0 && a[i - 1][j]<2) {
AIout(a, i - 1, j);
}
}
}
void main() {
//show(a);
AIout(a, iplayer, jplayer);
}