题目描述:输入一个N*N的矩阵,矩阵由0,1构成。0代表有障碍,不能通过;1代表可以通过。请输出从左上角到右下角的最小步数。
#include <cstdio>
void Dfs(int k,int x, int y);
bool Map[50][50];
short Rule[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};//能省空间就省空间。
int N, Ans=9999;
int main() {
scanf("%d", &N);
for(int a=0; a<N; a++) {
for(int b=0; b<N; b++) {
scanf("%d", &Map[a][b]);
}
}
Dfs(0, 0, 0);
printf("%d", Ans);
return 0;
}
void Dfs(int k, int x, int y) {
if(x==N-1 && y==N-1) {
if(Ans > k) {
Ans = k;
}
} else {
for(int a=0; a<4; a++) {
int xx = x+Rule[a][0];
int yy = y+Rule[a][1];
if(0<=xx && xx<N && 0<=yy && yy<N) {
if(Map[xx][yy]) {
Map[x][y] = false;
Dfs(k+1, xx, yy);
Map[x][y] = true;
}
}
}
}
return;
}
p.s.:在C语言中,bool类型是可以用数字来赋值的,0代表false,非0代表true。传送门