トピック:2次元配列を定義します:
INT迷路[5] [5] = {
0、1、0、0、0、
0、1、0、1、0、
0、0、0、0、0、
0、1、1、1、0、
0、0、0、1、0、
}。
それは1が壁を表している迷路を表し、どこへ行く0道、唯一の横に行くことができない、行くために横または縦方向に行くことができる、から見つけるようにプログラムが必要な左上にの右下隅ルートのピースの数。
コード
書式#include <iostreamの>
の#include <cstdioを>
std名前空間を使用しました。
BOOL G [10] [10]、VIS [10] [10]。
int型のD [5] = {-1,0,1,0、-1}。
INTのN、M、NX、NY、EX、EY、CNT。
ボイドDFS(int型のx、int型のY){
IF(X == EX && Y == EY){
CNT ++。
返します。
}
(int型のk = 0; K <4; kは++)用{
int型L = X + D [k]を、
INTのR = Y + D [K + 1]。
IF(L> = 0 && R> = 0 && L <= N && R <= M &&!G [L] [R] &&!VIS [L] [R]){ //注意起始位置为(0,0)、
VIS [L ] [R]が真=。
DFS(L、R)。
VIS [L] [R] = FALSE; //回溯
}
}
リターン。
}
int型のmain(){
int型のT、ZX、ZY。
N = 4、M = 4。
NX = 0、NY = 0; EX = 4; EY = 4。
G [0] [1] trueに=、
G trueに= [1] [1];
G trueに= [1] [3];
G trueに= [3] [1];
Gは、[3] [2] trueに=。
G trueに= [3] [3];
G trueに= [4] [3];
DFS(NX、NY);
COUT << CNT、 どのくらいの出力線//
0を返します。
の#include <cstdioを>
std名前空間を使用しました。
BOOL G [10] [10]、VIS [10] [10]。
int型のD [5] = {-1,0,1,0、-1}。
INTのN、M、NX、NY、EX、EY、CNT。
ボイドDFS(int型のx、int型のY){
IF(X == EX && Y == EY){
CNT ++。
返します。
}
(int型のk = 0; K <4; kは++)用{
int型L = X + D [k]を、
INTのR = Y + D [K + 1]。
IF(L> = 0 && R> = 0 && L <= N && R <= M &&!G [L] [R] &&!VIS [L] [R]){ //注意起始位置为(0,0)、
VIS [L ] [R]が真=。
DFS(L、R)。
VIS [L] [R] = FALSE; //回溯
}
}
リターン。
}
int型のmain(){
int型のT、ZX、ZY。
N = 4、M = 4。
NX = 0、NY = 0; EX = 4; EY = 4。
G [0] [1] trueに=、
G trueに= [1] [1];
G trueに= [1] [3];
G trueに= [3] [1];
Gは、[3] [2] trueに=。
G trueに= [3] [3];
G trueに= [4] [3];
DFS(NX、NY);
COUT << CNT、 どのくらいの出力線//
0を返します。
}