N*N矩阵,其中0是表示可以走的,1表示无法走,矩阵由二维数组表示,左上角是入口,右下角是出口,只能横着走和竖着走,要求找出最短路径。
#include<bits/stdc++.h> using namespace std; int mymax = 10000; int f[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; int a[20][20], v[20][20], v1[20][20]; int l = 1; int n;//矩阵规模 bool check(int x1, int y1) { if (x1 < 0 || x1 >= n ||_____(1)________) return false; if (a[x1][y1] == 1 || _____(2)______ )return false; return true; } void dfs(int x, int y) { if (x == n - 1 && y == n - 1) { if (l < mymax) { mymax = l; memcpy(v1, v, sizeof(v1)); } return; } for (int k = 0; k < 4; k++) { int x1,y1; x1 = x + _____(3)_____; y1 = y + _____(4)_____; if (check(x1, y1)) { _____(5)______; _____(6)______; dfs(x1, y1); _____(7)______; v[x1][y1] = 0; } } } int main() { cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cin >> a[i][j]; } dfs(0, 0); int d = v1[n - 1][n - 1]; int x = n - 1, y = n - 1; int k; int qn[400][2]; qn[0][0] = n - 1; qn[0][1] = n - 1; for (k = 1;; k++) { x = x - f[d-1][0]; y = y - f[d-1][1]; qn[k][0] = x; qn[k][1] = y; d = v1[x][y]; if (x == 0 && y == 0) break; } for (int i = k; i >= 0; i--) cout<<_____(8)_____<<","<<_____(9)_______<<endl; return 0; }