- 浏览: 584651 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
一、深度优先搜索遍历磁盘文件目录
二、POJ 1501
题意:给出一个字符矩阵和多行单词,然后看字符矩阵中是否有和这些单词匹配的单词,只能按照直线(横、竖、斜)进行匹配,如果匹配成功则输出首字母和末字母匹配成功的位置,没有则输出Not found。样例如下:
Sample Input
5
EDEEE
DISKE
ESEEE
ECEEE
EEEEE
DISC
DISK
DISP
0
Sample Output
1,2 4,2
2,1 2,4
Not found
思路:遍历字符矩阵中的每一个字符,看其是否与所给单词的第一字符相同,如果相同则DSF继续搜索下一个字母。
import java.io.File; import java.io.IOException; import java.util.Stack; import java.util.Queue; import java.util.LinkedList; public class ListFile{ public static void main(String[] args) throws IOException { File file = new File("c:/java"); DFS1(file); System.out.println("--------------------------------------"); System.out.println("--------------------------------------"); DFS2(file); } // 文件深度优先遍历,栈实现 private static void DFS1(File file) throws IOException { Stack< File> stack = new Stack< File>(); stack.push(file);//当前目录进栈 File fileInStack = null; while (!stack.isEmpty()) { fileInStack = stack.pop(); System.out.println("dir:" + fileInStack.getCanonicalPath());//访问当前目录 File[] files = fileInStack.listFiles();//当前目录的所有邻接点 for (File eachFile : files) { if (eachFile.isFile()) { System.out.println("file:" + eachFile.getCanonicalPath()); } else { stack.push(eachFile);//邻接点进栈 } } } } // 文件深度递归遍历 private static void DFS2(File file) throws IOException { System.out.println("dir:" + file.getCanonicalPath()); File[] files = file.listFiles(); for (File eachFile : files) { if (eachFile.isFile()) { System.out.println("file:" + eachFile.getCanonicalPath()); } else { DFS2(eachFile); } } } }
二、POJ 1501
题意:给出一个字符矩阵和多行单词,然后看字符矩阵中是否有和这些单词匹配的单词,只能按照直线(横、竖、斜)进行匹配,如果匹配成功则输出首字母和末字母匹配成功的位置,没有则输出Not found。样例如下:
Sample Input
5
EDEEE
DISKE
ESEEE
ECEEE
EEEEE
DISC
DISK
DISP
0
Sample Output
1,2 4,2
2,1 2,4
Not found
思路:遍历字符矩阵中的每一个字符,看其是否与所给单词的第一字符相同,如果相同则DSF继续搜索下一个字母。
import java.util.Arrays; import java.util.Scanner; public class Main{ private char c[][]; //字符矩阵 private int n; //字符矩阵的大小n*n private String s;//在字符中要找的单词 private boolean flag;//匹配成功的标志 private boolean vis[][]; //状态数组 private int sx,sy,ex,ey;//匹配成功后,首字母和末字母匹配成功的位置 private int dir[][]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1}}; public Main(int n,String s,char[][] c){ this.n=n; this.s=s; this.c=c; flag=false; vis=new boolean[n][n]; } private void dfs(int i,int j,int m,int k) { int x,y; if(flag) return; //深搜结束条件,必须加个m==s.length()因为给出的字符串可能有重复字母 if((c[i][j]==s.charAt(s.length()-1))&&m==s.length()) { ex=i;ey=j; //记录匹配成功末字符位置 flag=true; return; } x=i+dir[k][0]; y=j+dir[k][1]; if(x>=0&&x<n&&y>=0&&y<n&&c[x][y]==s.charAt(m)&&!vis[x][y]) { vis[x][y]=true; dfs(x,y,m+1,k); //同一方向,搜索下一个字符 vis[x][y]=false; } } public static void main(String args[]){ Scanner in=new Scanner(System.in); String s=""; int n=in.nextInt(); char[][] c=new char[n][n]; for(int i=0;i<n;i++){ s=in.next(); for(int j=0;j<n;j++) c[i][j]=s.charAt(j); } while(true) { s=in.next(); if(s.equals("0")) break; Main main=new Main(n,s,c); main.go(); } } private void go(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(c[i][j]==s.charAt(0)){//找到第一个字母后,按同一个方向搜索 for(int k=0;k<8;k++){ dfs(i,j,1,k); if(flag) { sx=i;sy=j; System.out.printf("%d,%d %d,%d\n",sx+1,sy+1,ex+1,ey+1); return; } } } if(!flag) System.out.printf("Not found\n"); } }
- poj1501.zip (1.6 KB)
- 下载次数: 0
发表评论
-
龙抬头
2014-11-10 15:06 551... -
求推箱子的最小步数(java)
2014-05-06 08:32 3664题目(poj1475):推箱子,要求箱子移动步骤最小。如图:T ... -
田忌赛马: POJ 2287(贪心解法)
2013-01-03 19:24 2983POJ 2287问题描述: 你一定听过田忌赛马的故事吧? ... -
回溯法入门学习之二(九宫格与数独)
2012-11-11 08:53 3118回溯法的基本做法是搜索解空间,一种组织得井井有条的,能避 ... -
回溯法入门学习之一
2012-11-10 15:53 1776一: 回溯法 有时我们要得到问题的解,先从其中某一种情况 ... -
SPFA算法求单源最短路径
2012-11-04 23:00 1869很多时候,给定的图存在负权边,这时类似Dijkstra等算法 ... -
图解Bellman-Ford算法
2012-11-03 19:39 5822Bellman-Ford算法: ... -
并查集入门精讲,实例2个(JAVA)
2012-10-30 14:47 3989一、什么是并查集 ... -
深度优先搜索学习五例之四(JAVA)
2012-10-21 17:25 1966先继续“深度优先搜索学习五例之三”http://128k ... -
深度优先搜索学习五例之三(JAVA)
2012-10-20 20:43 2264一、深度优先搜索框架一递归实现,流程如下: ... -
深度优先搜索学习五例之二(JAVA)
2012-10-20 12:24 2225继续“深度优先搜索学习五例之一 ”中的第一例子:http:// ... -
深度优先搜索学习五例之一(JAVA)
2012-10-19 14:54 4907深度优先搜索DFS(Depth First Search) ( ... -
广度优先搜索学习五例之五
2012-10-17 21:11 1403如果已经知道搜索的开始状态和结束状态,要找一个满足某种条 ... -
广度优先搜索学习五例之四
2012-10-16 15:26 1101例:输出由数字0,1,2..n ... -
广度优先搜索学习五例之三
2012-10-14 19:19 1459广度优先搜索是以某一节点为出发点,先拜访所有相邻的节点。 ... -
广度优先搜索学习五例之一
2012-10-13 15:27 1641有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜 ... -
广度优先搜索学习五例之二(JAVA)
2012-10-12 14:32 2064再次强调: 图的广度优先搜索,要遵守以下规则: (0) 选取某 ... -
动态规划算法学习十例之十
2012-10-08 21:00 2222凸多边形最优三角剖分 一凸8边形P的顶点顺时针为{v1 ... -
动态规划算法学习十例之九
2012-10-07 15:50 1069最长单调递增子序列的长度问题 所谓子序列,就是在原序列里删 ... -
动态规划算法学习十例之八
2012-10-05 15:14 1233矩阵链乘法最优结合问题 一、《问题的引出》 看下面一个 ...
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/1702286
NULL 博文链接:https://128kj.iteye.com/blog/1702580
NULL 博文链接:https://128kj.iteye.com/blog/1701628
代码 基于深度优先搜索算法图论代码代码 基于深度优先搜索算法图论代码代码 基于深度优先搜索算法图论代码代码 基于深度优先搜索算法图论代码代码 基于深度优先搜索算法图论代码代码 基于深度优先搜索算法图论代码...
关于深度算法的优先,根据顶节点按照邻接点遍历,遇到一个节点则先把此节点遍历完成再遍历另一节点
java 实现图数据结构以及深度优先和广度优先算法
java集合深度学习
由于每次将可能的新状态入栈,并标记为已经搜索到,当一直深入时便会遇到下一步可能搜索到的所有状态都已经标记为搜索过了,即没有可入栈的,这条深度搜索路线结束,下次出栈为栈顶状态,即另一条深度搜索路线。...
用C写的实现对关系矩阵图的深度优先搜索,判断是否存在回路。如果存在就把它存入文件
[图灵社区]《深度学习搜索引擎开发:Java实现》源代码
TSP问题的深度优先的java算法,代码很完整,包大家自己看着建一下,希望对大家有用
深度学习搜索引擎开发-Java实现-源代码.zip
数据结构课程中的二叉树的深度优先搜索程序,采用C语言编写
二叉树的深度优先搜索与广度优先搜索的非递归方法实现
深度优先搜索 深度优先搜索 深度优先搜索深度优先搜索 深度优先搜索 深度优先搜索
这是基于java编写的一个深度优先算法,可以实现jar 文件的查阅,控制台能显示转黄的结果
深度优先搜索(DFS)算法是解决图形和树形结构问题的重要工具,具有广泛的应用。本教程将深入介绍DFS算法的原理和实现,使用Java示例演示如何应用DFS来解决问题。无论您是初学者还是有经验的Java开发者,通过学习DFS...
这是一个图的深度优先搜索遍历的C代码的具体实现,详细情况请参见 压缩包中的“说明.txt”
直接演示:求深度优先遍历、广度优先遍历、最短路径、最小生成树