#include <stdio.h>
#include <string.h>
#include <windows.h>
char matrix[80][80];
int next[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int book[5][5];
int data[5][5];
int minstep = 999;
int count = 0;
// 题目描述:青蛙在一块5*5的池塘中,想从(0,0)跳到(4,4),每次只能左右或者上下跳一格
void dfs(int x,int y,int step){
data[x][y] = step;
// 到达终点
if(x == 4 && y == 4){
for(int i = 0;i < 5;i++){
for(int j = 0;j < 5;j++){
if(book[i][j] == 0){
data[i][j] = 0;
}
printf("%d\t",data[i][j]);
}
printf("\n");
}
count++;
}
int nextx = 0;
int nexty = 0;
for(int i = 0;i < 4;i++){
nextx = x + next[i][0];
nexty = y + next[i][1];
// 超出边界
if(nextx < 0 || nexty < 0 || nextx >= 5 || nexty >= 5){
continue;
}
if(book[nextx][nexty] == 0){
book[nextx][nexty] = 1;
dfs(nextx,nexty,step+1);
// 返回父节点重新判断
book[nextx][nexty] = 0;
}
}
}
int main() {
book[0][0]=1;
dfs(0,0,1);
system("pause");
return 0;
}
回溯算法练习之青蛙过河
最新推荐文章于 2024-07-24 20:44:05 发布