- 浏览: 604263 次
- 来自: ...
文章分类
最新评论
-
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 632... -
求推箱子的最小步数(java)
2014-05-06 08:32 3776题目(poj1475):推箱子,要求箱子移动步骤最小。如图:T ... -
田忌赛马: POJ 2287(贪心解法)
2013-01-03 19:24 3062POJ 2287问题描述: 你一定听过田忌赛马的故事吧? ... -
回溯法入门学习之二(九宫格与数独)
2012-11-11 08:53 3337回溯法的基本做法是搜索解空间,一种组织得井井有条的,能避 ... -
回溯法入门学习之一
2012-11-10 15:53 1848一: 回溯法 有时我们要得到问题的解,先从其中某一种情况 ... -
SPFA算法求单源最短路径
2012-11-04 23:00 1943很多时候,给定的图存在负权边,这时类似Dijkstra等算法 ... -
图解Bellman-Ford算法
2012-11-03 19:39 5941Bellman-Ford算法: ... -
并查集入门精讲,实例2个(JAVA)
2012-10-30 14:47 4070一、什么是并查集 ... -
深度优先搜索学习五例之四(JAVA)
2012-10-21 17:25 2030先继续“深度优先搜索学习五例之三”http://128k ... -
深度优先搜索学习五例之三(JAVA)
2012-10-20 20:43 2316一、深度优先搜索框架一递归实现,流程如下: ... -
深度优先搜索学习五例之二(JAVA)
2012-10-20 12:24 2270继续“深度优先搜索学习五例之一 ”中的第一例子:http:// ... -
深度优先搜索学习五例之一(JAVA)
2012-10-19 14:54 4983深度优先搜索DFS(Depth First Search) ( ... -
广度优先搜索学习五例之五
2012-10-17 21:11 1445如果已经知道搜索的开始状态和结束状态,要找一个满足某种条 ... -
广度优先搜索学习五例之四
2012-10-16 15:26 1168例:输出由数字0,1,2..n ... -
广度优先搜索学习五例之三
2012-10-14 19:19 1504广度优先搜索是以某一节点为出发点,先拜访所有相邻的节点。 ... -
广度优先搜索学习五例之一
2012-10-13 15:27 1675有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜 ... -
广度优先搜索学习五例之二(JAVA)
2012-10-12 14:32 2131再次强调: 图的广度优先搜索,要遵守以下规则: (0) 选取某 ... -
动态规划算法学习十例之十
2012-10-08 21:00 2280凸多边形最优三角剖分 一凸8边形P的顶点顺时针为{v1 ... -
动态规划算法学习十例之九
2012-10-07 15:50 1112最长单调递增子序列的长度问题 所谓子序列,就是在原序列里删 ... -
动态规划算法学习十例之八
2012-10-05 15:14 1285矩阵链乘法最优结合问题 一、《问题的引出》 看下面一个 ...
相关推荐
在这个“深度优先搜索学习五例之四”的主题中,我们将重点关注使用Java实现DFS解决具体问题的情况。这篇博客文章可能通过一个具体的实例,如迷宫求解,来演示如何利用DFS进行递归或栈操作。 首先,我们来看"MazeDsf...
深度优先搜索(DFS, Depth-First Search)是一种用于遍历或搜索树或图的算法,它从根节点开始,沿着某一条路径一直深入到叶子节点,然后再回溯寻找其他路径。在本例中,我们有两个Java文件:MazeDsf.java 和 Queen....
在这个主题"深度优先搜索学习五例之一(JAVA)"中,我们可以期待看到至少五个不同的应用实例,这些实例将用Java语言实现,可能包括但不限于以下场景: 1. **图的遍历**:DFS可以用于遍历无向图或有向图,通过访问每...
通常,这样的教程会包括代码实现、步骤解析以及为什么选择BFS而不是深度优先搜索(Depth-First Search, DFS)的原因。 【标签】:“源码”、“工具” “源码”标签表明文章会包含实际的Java代码示例,读者可以参考...
2. Main1.java:这个文件可能是对BFS的另一种实现,或者是辅助Main.java进行特定任务的类,比如提供额外的测试用例,或者实现了与BFS相关的其他算法(如深度优先搜索DFS)进行对比。 综上所述,这个压缩包文件的...
在给定的"广度优先搜索学习五例之五"中,我们可能探讨的是一个具体的应用场景或者变体,但描述中并未提供详细信息。通常,BFS 的实现涉及以下几个关键元素: 1. **队列(Queue)**:BFS 使用队列作为主要的数据结构...
- **深度优先搜索(DFS)**:递归地探索节点的邻接节点,用于遍历或搜索图。 - **广度优先搜索(BFS)**:使用队列数据结构,按照距离从起点到终点的顺序访问节点。 4. **动态规划(DP)**: - **斐波那契数列**:使用...
2. **搜索算法**:如线性搜索、二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)等,这些是解决查找问题的基础,对于理解数据结构至关重要。 3. **图论算法**:例如Dijkstra最短路径算法、Floyd-Warshall所有对...
9. **DFS(深度优先搜索)算法**:DFS是一种用于遍历或搜索树或图的算法,沿着树的深度遍历树的节点,尽可能深地搜索树的分支。在Java中,DFS可以借助于递归或栈来实现。 这些知识点涵盖了计算机科学基础和算法设计...
2. **搜索算法**:二分查找、线性查找、深度优先搜索(DFS)和广度优先搜索(BFS),这些算法在处理数据集合时非常实用。 3. **图论算法**:Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法,它们在网络...
2. **搜索算法**:二分查找、深度优先搜索、广度优先搜索等,探讨如何在数据结构中高效地查找目标元素。 3. **数据结构**:栈、队列、链表、树、图等,如何利用它们来实现各种算法。 4. **动态规划**:如斐波那契...
深度遍历(又称深度优先遍历)是指沿着树的深度遍历树的节点,尽可能深地搜索树的分支,当节点v的所有出边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。在目录结构中,这意味着如果当前遍历到的文件是...
这个类可能实现了A*算法、Dijkstra算法或者深度优先搜索(DFS)等常见的寻找最短路径的算法。这些算法的核心目标是找到从起点到终点的最短路径,同时尽量避免无效的探索。 以A*算法为例,它结合了Dijkstra算法的...
2. **搜索算法**:二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)等,这些算法在处理数据查找和遍历树形结构时非常有效。 3. **图论算法**:最短路径问题(Dijkstra算法、Floyd算法),最小生成树(Prim算法...
在实现这个项目时,我们可能需要学习图算法,如深度优先搜索(DFS)或广度优先搜索(BFS),用于寻找从起点到终点的最短路径。数据结构如栈或队列会在这里发挥重要作用。同时,我们需要理解如何将迷宫表示为二维数组...
这些代码可能包括简单的排序算法(冒泡、选择、插入、快速、归并等)、查找算法(顺序、二分、哈希等)、图算法(深度优先搜索、广度优先搜索、最小生成树、最短路径等)以及其他复杂的数据结构实现。 5. **学习...
2. **搜索算法**:如二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)。这些算法在处理大量数据时具有重要作用,如在树和图结构中寻找特定元素或路径。 3. **图论算法**:如Dijkstra最短路径算法、Floyd-...
3. **图论算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),以及Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法等。 4. **动态规划**:解决许多复杂问题的有效方法,如背包问题、最长公共子序列、...
判断棋局胜负可能需要深度优先搜索(DFS)或广度优先搜索(BFS);而象棋的AI对战则可能涉及最小-最大搜索算法配合Alpha-Beta剪枝。 4. **状态管理**:棋盘上的每一步操作都会改变游戏的状态,这需要一个高效的数据...