迷宫出逃之单词匹配

Word Search

一、迷宫问题解决了

http://my.oschina.net/findurl/blog/343774

二、下面这个单词搜索问题


For example,
 Given board = 
[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.
其实也就是迷宫问题中的一个通道。


如何解决那?

其实就是单词的首字母应该是迷宫的入口,而单词的结尾就是迷宫问题的出口

/**
 * 搜索一个二维数组中的单词
 * 
 * @author WZ 20141113
 */
public class SearchWord {
   
	char searchArray[][]={
			{'a','b','c','e'},
			{'s','f','c','f'},
			{'a','d','e','e'}
	};
	
	//方向
	int move[][] = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
	
	//存在
	boolean isHas=false;

	//位置移动
	int d=0;
	
	public void search(String word){
		//1.首先找到位置
		for(int i=0;i<3;i++)
			for(int j=0;j<4;j++){
				if(searchArray[i][j]==word.charAt(0)){
					isHasWord(i,j,word);
					if(isHas){
						System.out.println("找到了("+i+","+j+")");
						return;
					}
				}
			}
	}
		
	/*
	 * 搜索单词
	 */
    public void isHasWord(int i,int j,String word){
    	System.out.println(searchArray[i][j]);
    	
    	//找到了
    	if((searchArray[i][j]==word.charAt(word.length()-1))&&d==word.length()-1){
    		isHas=true;
    		return;
    	}
    	
    	for(int k=0;k<8;k++){
    		
    		int m=i+move[k][0];
     		int n=j+move[k][1];
     		 
    	    //如果到边界了就结束了
    		if(m>2||m<0||n>3||n<0||d>word.length()-1)
          			return;
     		 
     		 //下一个匹配的话就进入 不然换方向
    		if(searchArray[m][n]==word.charAt(d+1)){
    	     d++;//位置移动下一位
    	    
    		 isHasWord(m,n,word);
    		 if(isHas)
    			 return;
    		}
    	}
    }		
    
    public static void main(String[] args) {
    	SearchWord sw=new SearchWord();
    	sw.search("be");
//    	sw.search("bfc");
	}
}



转载于:https://my.oschina.net/findurl/blog/344156

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值