zoukankan      html  css  js  c++  java
  • 剑指offer-面试题12-矩阵中的路径-回溯法

    /*
    题目:
    	设计一个函数,判断一个矩阵中是否存在一条包含该字符串所有字符的路径。
    	路径可从字符串的任意一格开始,每一步可向上、下、左、右移动一格。
    	如果一条路径经过了矩阵中的某一格,那么该路径不能再次经过该格。
    */
    /*
    思路:
    	采用回溯法。
    	遍历数组,当选中其中一个格子时,若与当前字符串的指定位置匹配,
    	则检测它四周的格子是否匹配,若匹配,继续深入,不匹配,则回退一格。
    	
    */
    
    #include <iostream>
    #include<vector>
    #include<string.h>
    using namespace std;
    
    
    bool hasPathCore(const char* matrix,int rows,int cols,int row,int col,const char* str,int& lengthAt,bool* visited){
        if(str[lengthAt] == '') return true;
        if(row >=0 && col >=0 && row < rows && col < cols && !visited[cols*row+col] &&matrix[row*cols+ col] == str[lengthAt]){
            visited[row*cols+ col] = true;
            lengthAt++;
            cout<<" "<<matrix[row*cols+col];
            if(hasPathCore(matrix,rows,cols,row+1,col,str,lengthAt,visited) || hasPathCore(matrix,rows,cols,row-1,col,str,lengthAt,visited) ||
               hasPathCore(matrix,rows,cols,row,col+1,str,lengthAt,visited) || hasPathCore(matrix,rows,cols,row,col-1,str,lengthAt,visited) ) {
                return true;
               }
            --lengthAt;
            visited[row*cols+col] = false;
        }
    
        return false;
    }
    bool hasPath(char* matrix,int rows,int cols,char* str){
        if(!matrix || rows <= 0 || cols <= 0 || !str){
            return false;
        }
        bool* visited = new bool[rows*cols];
        memset(visited,0,rows*cols);
        int lengthAt = 0;
        for(int row = 0; row < rows; row++){
            for(int col = 0; col < cols; col++){
                cout<<row<<" "<<col<<endl;
                cout<<matrix[cols*row + col]<<" ";
                if(hasPathCore(matrix,rows,cols,row,col,str,lengthAt,visited)){
    
                    return true;
                }
                cout<<endl;
            }
        }
        return false;
    }
    
    
    
    int main()
    {
        char matrix[] = "ABCEHJIG SFCSLOPQ ADEEMNOE ADIDEJFM VCEIFGGS";
        //char* matrix = "abtgcfcsjdeh";
        char str[] = "SGGFIECVAASABCEHJIGQEM";
        cout<<hasPath(matrix,5,8,str);
        return 0;
    }
    

       

  • 相关阅读:
    MATLAB的一个FFT程序
    anyway,gnuradio需要学习python,so let us start
    《dinv into python》开始了解python
    Oracle 多表 连接 顺序 与 性能关系 测试
    MySQL 和 PostgreSQL 对比
    Oracle Mutex 机制 说明
    Oracle 大规模 delete,update 操作 注意事项
    oracle 11g 新特性 Flashback Data Archive 说明
    Oracle PL/SQL 优化与调整 Bulk 说明
    Oracle 判断 并 手动收集 统计信息 脚本
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11838785.html
Copyright © 2011-2022 走看看