# 11291 - Mouse Maze
>author: Utin
###### tags: `recursion`
---
## Brief
See the code below
## Solution 0
```c=
#include <stdio.h>
#include <limits.h>
int start[2]; //起點座標
int r, c;
int min_sum = INT_MAX;
char table[501][501]; //迷宮
void run(int index_i, int index_j, int sum);
int check(int index_i, int index_j); //檢查下一步是否能走
int min(int a, int b); //找>0的最小值,若無則return 0
int main() {
int n;
scanf("%d", &n);
for(int t = 0; t < n; t++) {
scanf("%d %d", &r, &c);
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
scanf("\r%c", &table[i][j]);
//存起點位址
if(table[i][j] == 'S') {
start[0] = i;
start[1] = j;
}
}
}
run(start[0], start[1], 0);
//輸出
if(min_sum == INT_MAX) printf("%d\n", -1); //到不了要輸出-1
else printf("%d\n", min_sum);
//還原
min_sum = INT_MAX;
}
}
void run(int index_i, int index_j, int sum) {
if(sum > min_sum) return;
else if(table[index_i][index_j] == 'F') {
if(min_sum > sum) min_sum = sum;
}
else {
//設成走過
table[index_i][index_j] = '#';
if(check(index_i+1, index_j)) run(index_i+1, index_j, sum+1);
if(check(index_i-1, index_j)) run(index_i-1, index_j, sum+1);
if(check(index_i, index_j+1)) run(index_i, index_j+1, sum+1);
if(check(index_i, index_j-1)) run(index_i, index_j-1, sum+1);
//還原成沒走過
table[index_i][index_j] = '$';
}
}
//檢查下一步是否能走
int check(int index_i, int index_j) {
if(index_i >= 0 && index_i < r && index_j >= 0 && index_j < c) {
if(table[index_i][index_j] == '$' || table[index_i][index_j] == 'F') {
return 1;
}
}
return 0;
}
// By Utin
```
## Reference