寻路问题:N*N矩阵,其中0是表示可以走的,1表示无法走,矩阵由二维数组表示,角是入口,右下角是出口,只能横着走和竖着走,要求找出最短路径
#include<bits/stdc++.h>
using namespace std;
int mymax-10000:
int £[4][2]={{-1,0}1,11.01.10.-1},[0,1}}
int a[20][20],v[20][20].~1[20][20];
int 1=1;
int n://矩阵的规模
bool check(int xl,int yl} {
if(x1<0|lx1>=n| 1 )return falsei
if(a[x1][y1]--11l 2 ))return false:
returh true;
void dfs(int x,int y)(
if(xmmn-1&&ymmn-1){
if(l<mymax){
mymаx=l;
memcpy[v1,v,sizaof(v1});
return;
forlint k=Ó;k<4;k++){
int x1,y1;
x1=x+3
yi-y+ ④
if(checkix1,y1))
5
6
dfs(x1,y1);
7
v[x1][y1]-0r
int main ()
cin>>ni
for(int i=0 i<n i++){
for【int im0 j =0 j<n j++)
cin>>a[±][j];
dfs(0,0);
int d-vi[n-1][n-1]
,int x=n-l,y=n-1;
int k;
int qn[400][2];
qn[o][o]-n-1;
qn[0][1]-n-1;
£or(k=1;;k++){
x=x-f[d][0];y-y-f[d][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<<
<<endl;
return 0;
£or(k=1;;k++){
x=x-f[d][0];y-y-f[d][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<<
<<endl;
return 0;
for(k=1;;k++){
x=x-f[d][0];
y-y-f[d][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<<
<<endl;
return 0;
1处和2处填
.y1<=0lly1>n 和 v[x1][y1]>0
.y1<0|ly1>=n和vx1[y1]>0
.y1>0&&y1<=n 和 v[x1][y1]>0
yl>0&&y1<n 和 v[x1 ][y1]>0
3处和4处填
.f[k][0]和 f[k][1]
f[k][1]和f[k][0]
f[0][k]和£[1][k]
f[1][k]和 f[0][k]
5处填
.v[x1][y1]=k+1
vlxlLyl]=k
v[x][y]=k;
v[x][y]=k+1;
6处和7处填
l++和 l--
k++和 k--
x1++和 x1--
y1++和 y1--
8处和9处填
qn[i][1]和 qn[i][2]
qn[i][0]和 qn[i][1]
qn[1][i]和 qn[2][i]
qn[0][i]和 qn[1][i]
发表评论