对于每个位置,判断到达的步数是不是更小,大了就不处理,方法比较笨,不过也算是做出来了
import java.util.*;
public class Main {
Scanner sc=new Scanner(System.in);
int[][] array;
char[][] car;
int n=0;
int m=0;
int b;
int e;
public void init()
{
while((n=sc.nextInt())!=0|(m=sc.nextInt())!=0)
{
car=new char[n][m];
array=new int[n][m];
b=0;
e=0;
for(int i=0;i<n;i++)
{
String s=sc.next();
if(s.indexOf('Y')!=-1)
{
b=i*m+s.indexOf('Y');
}
if(s.indexOf('T')!=-1)
{
e=i*m+s.indexOf('T');
}
car[i]=s.toCharArray();
Arrays.fill(array[i], 310);
}
array[b/m][b%m]=0;
fun(b);
if(array[e/m][e%m]==310)
{
System.out.println("-1");
}
else
{
System.out.println(array[e/m][e%m]);
}
}
}
public void fun(int index)
{
if(index==e)
{
return;
}
int i=index/m;
int j=index%m;
if(i-1>=0)
{
if(car[i-1][j]!='S'&&car[i-1][j]!='R')
{
if(car[i-1][j]=='E'||car[i-1][j]=='T')
{
if(array[i][j]+1<array[i-1][j])
{
array[i-1][j]=array[i][j]+1;
fun((i-1)*m+j);
}
}
if(car[i-1][j]=='B')
{
if(array[i][j]+2<array[i-1][j])
{
array[i-1][j]=array[i][j]+2;
fun((i-1)*m+j);
}
}
}
}
if(i+1<n)
{
if(car[i+1][j]!='S'&&car[i+1][j]!='R')
{
if(car[i+1][j]=='E'||car[i+1][j]=='T')
{
if(array[i][j]+1<array[i+1][j])
{
array[i+1][j]=array[i][j]+1;
fun((i+1)*m+j);
}
}
if(car[i+1][j]=='B')
{
if(array[i][j]+2<array[i+1][j])
{
array[i+1][j]=array[i][j]+2;
fun((i+1)*m+j);
}
}
}
}
if(j-1>=0)
{
if(car[i][j-1]!='S'&&car[i][j-1]!='R')
{
if(car[i][j-1]=='E'||car[i][j-1]=='T')
{
if(array[i][j]+1<array[i][j-1])
{
array[i][j-1]=array[i][j]+1;
fun(i*m+j-1);
}
}
if(car[i][j-1]=='B')
{
if(array[i][j]+2<array[i][j-1])
{
array[i][j-1]=array[i][j]+2;
fun(i*m+j-1);
}
}
}
}
if(j+1<m)
{
if(car[i][j+1]!='S'&&car[i][j+1]!='R')
{
if(car[i][j+1]=='E'||car[i][j+1]=='T')
{
if(array[i][j]+1<array[i][j+1])
{
array[i][j+1]=array[i][j]+1;
fun(i*m+j+1);
}
}
if(car[i][j+1]=='B')
{
if(array[i][j]+2<array[i][j+1])
{
array[i][j+1]=array[i][j]+2;
fun(i*m+j+1);
}
}
}
}
}
public static void main(String[] args) {
// TODO 自动生成方法存根
new Main().init();
}
}
分享到:
相关推荐
WindowsServer2016配置DFS实现两个服务器之间文件同步.doc
带web页面展示
NLB+DFS实现高可靠性WEB服务器.pdfNLB+DFS实现高可靠性WEB服务器.pdfNLB+DFS实现高可靠性WEB服务器.pdfNLB+DFS实现高可靠性WEB服务器.pdfNLB+DFS实现高可靠性WEB服务器.pdfNLB+DFS实现高可靠性WEB服务器.pdf
使用DFS实现IIS负载均衡中双机文件同步
dfs实现迷宫问题
//DFS找增广路径 bool findflow(int k) //:boolean; {找结点k的后继结点i } { int i; //integer; if (k == n) { return true; // {找到了一条增广路径} } for (i = 1; i ; i++) // to n do { if (b[i] ...
基于DFS算法的迷宫问题实现,有详细的注释,可以自己设定迷宫,也可由程序随机生成
数据结构DFS深度优先遍历非递归算法实现,是自己编写的,可靠。
(迷宫算法,随机生成迷宫) 非常简单的随机生成迷宫的算法,用两种方式:Prime,DFS实现 快要大四了,要赶紧复习下数据结构好找工作,哈哈哈哈哈,所以最近在看图相关的算法,光看书没什么感觉,准备实践一下,写个迷宫算法 ...
重传Java实现DFS,BFS,上次传的没有成功,导致几位朋友下了没看到东西。
WindowsServer2016配置DFS实现两个服务器之间文件同步.pdf
dfs 非常简单的随机生成迷宫的算法,用两种方式:Prime,DFS实现
基于python的DFS算法设计与实现
使用qt通过递归与栈两种dfs实现的迷宫寻路可视化
图的dfs和bfs实现,可执行程序,数据结构第11次上机作业
基于c语言编写的八数码(N=3)等人工智能问题解决算法,N可改变,解决十五数码等高维问题
3. DFS命名空间+DFS复制 17 3.1. 简介 17 3.2. 策略 17 3.3. 注意事项 18 3.4. 安装步骤 18 3.5. 新建命名空间 19 3.6. 新建共享文件 23 3.7. 新建复制组 30 4. 总结 34 5. 疑难杂症 35 5.1. DFS服务在 AD初始化完毕...
实现了图的DFS和BFS算法,实现语言C++
这是山东大学可视化课程项目,用js实现的BFS和DFS,详细的展示了BFS和DFS的运行过程,网页可交互。