问题 4281 --寻路问题

4281: 寻路问题★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 96  解决: 44
[提交][状态][命题人:]

题目描述

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;  
}
 

输入

输出

提示

输出每个选项的答案即可

一共5行,每行一个大写字母

来源

[提交][状态]