#include <stdio.h>
#include <stdlib.h>
//判断位置是否有路
int Judge_aisle(int Star_row, int Star_line,int(*arr)[10]){
if (arr[Star_row][Star_line] == 0) {
return 1;
}return 0;
}
//标记已经走过的路坐标为1
void Masker_one(int(*arr)[10], int Star_row, int Star_line) {
arr[Star_row][Star_line] = 1;
}
//判断是否在围墙的边缘函数
int Judge_equal(int Star_row, int Star_line,int (*arr)[10]) {
if (Star_row==0||Star_line==0||Star_row==9||Star_line==9) {
return 1;
}
return 0;
}
void Function(int Star_row, int Star_line,int(*arr)[10],int*flag) {
//如果某一个点有路,则进入路 然后查看是否是边缘,最后标记为1
//判断上一个点是否有路
if (Judge_aisle(Star_row - 1, Star_line,arr)&&*flag==0) {
if (Judge_equal(Star_row-1, Star_line, arr)) {
*flag = 1;//标记为1
Masker_one(arr, Star_row-1, Star_line);//将该点记为1
return;//返回
}
Star_row--;
Masker_one(arr, Star_row, Star_line);//将该点要记为1
Function(Star_row, Star_line, arr, flag);//否则的话重新进入该函数,递归实现
}
//判断下一个点是否有路
if (Judge_aisle(Star_row + 1, Star_line, arr)&&*flag==0) {
if (Judge_equal(Star_row+1, Star_line, arr)) {
*flag = 1;
Masker_one(arr, Star_row+1, Star_line);
return;
}
Star_row++;
Masker_one(arr, Star_row, Star_line);
Function(Star_row, Star_line, arr, flag);
}
//判断左一个点是否有路
if (Judge_aisle(Star_row, Star_line-1,arr) && *flag == 0) {
if (Judge_equal(Star_row , Star_line-1, arr)) {
*flag = 1;
Masker_one(arr, Star_row , Star_line-1);
return;
}
Star_line--;
Masker_one(arr, Star_row , Star_line);
Function(Star_row , Star_line, arr, flag);
}
//判断右一个点是否有路
if (Judge_aisle(Star_row, Star_line + 1,arr) && *flag == 0) {
if (Judge_equal(Star_row , Star_line+1, arr)) {
*flag = 1;
Masker_one(arr, Star_row , Star_line+1);
return;
}
Star_line ++;
Masker_one(arr, Star_row, Star_line);
Function(Star_row, Star_line, arr, flag);
}
return;
}
int main(){
//老鼠走迷宫问题
//1.先定义一个迷宫
int arr[10][10]{
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,0,0,0,0,1,1},
{1,0,1,0,1,1,1,0,1,1},
{1,0,1,0,1,0,1,0,1,1},
{1,0,1,0,0,0,1,0,1,1},
{1,0,1,1,1,0,1,0,1,1},
{1,0,0,0,0,0,1,0,1,1},
{1,0,1,1,1,1,1,0,1,1},
{1,0,0,0,0,0,1,0,0,0},
{1,1,1,1,1,1,1,1,1,1},
};//1表示围墙,0表示可走通道
//2.定义初始位置坐,终点坐标
int Star_row = 1, Star_line = 1;
arr[Star_row][Star_line] = 1;
int flag = 0;
//3.创建判断和标记函数
//4.创建递归函数
Function(Star_row, Star_row, arr, &flag);
//5.打印一下二维数组
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%d", arr[i][j]);
}printf("\n");
}
//6.判断一下是否为1
if (flag == 1) {
printf("congratulation!");
}
else {
printf("there are no aisle!");
}
}
以上是本学者思考老鼠走迷宫问题后写出来的代码,用的是暴力手段,如果疑问或者错误的地方有欢迎提出!