1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include <stdio.h> int book[51][51],n, m,a[51][51],p,q,min=999999;
void dfs(int x, int y, int step) { int next[4][2] = { {0,1} , {1,0}, {-1,0}, {0,-1} }; int tx, ty, k; if (x == p && y == q) { if (step < min) { min = step; } return; } for (k = 0; k <= 3; k++) { tx = x + next[k][0]; ty = y + next[k][1]; if (tx<1 || tx>n || ty<1 || ty>m) { continue; } if (a[tx][ty] == 0 && book[tx][ty] == 0) { book[tx][ty] = 1; dfs(tx, ty, step + 1); book[tx][ty] = 0;
} } return;
}
int main() { int i, j, startx, starty; printf("你要输入几行几列的迷宫:"); scanf_s("%d %d", &n, &m); printf("请输入迷宫(0表示空地,1表示障碍物):\n"); for(i=1;i<=n;i++) for (j = 1; j <= m; j++) { scanf_s("%d", &a[i][j]); } printf("请输入初始位置:"); scanf_s("%d %d", &startx,&starty); book[startx][starty] = 1; printf("请输入小哈的位置:"); scanf_s("%d %d", &p, &q); dfs(startx,starty,0); printf("%d", min); getchar(); getchar(); return 0;
}
|