以走迷宫为例 0表示不可走 1表示可走
给出地图 以及始末位置 判断是否能到达
import java.lang.reflect.Array;
import java.util.*;
public class main {
public static int n,m;
public static int mp[][]=new int[1000][1000]; //存储地图信息 1可走,0不可走;
public static int d[][]= new int[][] {{0,-1},{-1,0},{0,1},{1,0}};//存储要移动的方向
public static int vis[][]=new int[1000][1000];//记录该点是否以被访问
public static int x1,y1,x2,y2; //记录始末位置
public static int flag=0;
public static void dfs(int x,int y) {
if(x==x2&&y==y2) { //到达终点
flag=1;
System.out.println("可以通过");
return;
}
for(int i=0;i<4;i++) {//遍历四个方向
int xx,yy;
xx=x+d[i][0];
yy=y+d[i][1];
//判断下一步是否可以走,一方面判断路是否可走,另一方面判断自己是否走过这条路;
if(vis[xx][yy]==0&&mp[xx][yy]==1&&x>0&&x<=n&&y>0&&y<=m) {
vis[xx][yy]=1;//标记访问的点
dfs(xx,yy);
}
}
}
public static void main(String args[]) {
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
m=cin.nextInt();
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
mp[i][j]=cin.nextInt();
}
}
x1=cin.nextInt();
y1=cin.nextInt();
x2=cin.nextInt();
y2=cin.nextInt();
vis[x1][y1]=1; //标记起始点 ,这个别忘了
dfs(x1,y1);
if(flag==0) {
System.out.println("不可通过");
}
}
}
输入样例
5 6
1 0 0 1 0 1
1 1 1 1 1 1
0 0 1 1 1 0
1 1 1 1 1 0
1 1 1 0 1 1
1 1
5 6
样例输出
可以通过
例题 https://www.luogu.com.cn/problem/P1238
题解: 注意移动方向 的优先顺序:左上右下
import java.lang.reflect.Array;
import java.util.*;
class node{
private int x,y;
public int getXX() {
return x;
}
public int getYY() {
return y;
}
public void setXX(int x) {
this.x=x;
}
public void setYY(int y) {
this.y=y;
}
}
public class main {
public static int n,m;
public static int mp[][]=new int[1000][1000];
public static int d[][]= new int[][] {{0,-1},{-1,0},{0,1},{1,0}};
public static int vis[][]=new int[1000][1000];
public static node ans[]=new node[1008611];
public static int cnt=0,flag=0;
public static int x1,y1,x2,y2;
public static void dfs(int x,int y) {
if(x==x2&&y==y2) {
flag=1;
System.out.print("("+x1+","+y1+")"+"->");
for(int i=0;i");
}
System.out.println("("+x2+","+y2+")");
return;
}
for(int i=0;i<4;i++) {
int xx,yy;
xx=x+d[i][0];
yy=y+d[i][1];
if(vis[xx][yy]==0&&mp[xx][yy]==1) {
vis[xx][yy]=1;
ans[cnt].setXX(xx);
ans[cnt].setYY(yy);
cnt++;
dfs(xx,yy);
vis[xx][yy]=0;
cnt--;
}
}
}
public static void main(String args[]) {
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
m=cin.nextInt();
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
mp[i][j]=cin.nextInt();
}
}
x1=cin.nextInt();
y1=cin.nextInt();
x2=cin.nextInt();
y2=cin.nextInt();
for(int i=0;i<1008610;i++) {
ans[i]=new node();
}
vis[x1][y1]=1;
dfs(x1,y1);
if(flag==0) {
System.out.println(-1);
}
}
}