码迷,mamicode.com
首页 > 其他好文 > 详细

深度优先搜索

时间:2020-03-30 16:16:14      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:个数   起点   ext   return   port   system   pre   深搜   目标   

深度优先搜索

【题目】类似一张宫格图,即迷宫,小明在迷宫中迷路了,好朋友苏格去寻找他,请你找出一条最短路径的步数。其中有障碍物,不能走。

输入要求:第一行输入两个整数n,m分别代表迷宫为n行m列,接下来n行分别输入m个数值,最后一行输入起点起点坐标(小华的坐标)和终点坐标(小明的坐标),输入0代表可以走,输入1代表障碍物;

输出要求:只输出最短步数

输入样例:

5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3

输出样例:

7

代码如下:

import java.util.Scanner;

public class J解救小哈深搜代码 {
	static int n,m,sx,sy,zx,zy;
	static final int size=55;
	static int min=99999999;
	static int dir[][]= {{0,1},{1,0},{0,-1},{-1,0}};
	static int map[][]=new int [size][size];//存放
	static int vis[][]=new int [size][size];//标记是否走过
	static Scanner in=new Scanner (System.in);
	public static boolean inmap(int x,int y)
	{//判断是否越界
		return(x>=1&&x<=n&&y>=1&&y<=m);
	}
	public static void dfs(int x,int y,int ans)
	{
		if(x==zx&&y==zy)
		{
			if(ans<min)
			{
				min=ans;//变更最小步数
			}
			return;
		}
		
		
		
		for(int i=0;i<4;i++)
		{//判断下一个点
			int nx=x+dir[i][0];
			int ny=y+dir[i][1];
			if(inmap(nx,ny)&&vis[nx][ny]==0&&map[nx][ny]==0)
			{
				vis[nx][ny]=1;
				dfs(nx,ny,ans+1);
				vis[nx][ny]=0;
				
			}
		}
		return ;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		n=in.nextInt();m=in.nextInt();
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				map[i][j]=in.nextInt();//1代表障碍物,0代表空地可走
			}
		}
		sx=in.nextInt();sy=in.nextInt();//起点
		zx=in.nextInt();zy=in.nextInt();//目标点
		vis[sx][sy]=1;//起点已经走过
		dfs(sx,sy,0);//开始
		
		System.out.print(min);
		return;
	}

}

深度优先搜索

标签:个数   起点   ext   return   port   system   pre   深搜   目标   

原文地址:https://www.cnblogs.com/lwyy1223-/p/12599011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!