leetcode:剑指 Offer 12. 矩阵中的路径(图)----大佬的pythonpython写的很好

题目:

在这里插入图片描述

分析:

第一想法:
只想到了直接遍历,没有想到如何优化。
题解:
没有优化,就是最基本的不匹配后的剪枝

我的c++代码:超时,但好像没错吧!

class Solution {
public:
bool f(string w,int t,int x,int y,vector<vector<char> > b,vector<vector<char> > b2)
{//t表示的是字符串的下标 
 //结束 
 if(t==w.size()) return 1;
 //非法下标 
 if(x<0||x>=b.size()||y<0||y>=b[0].size()) return 0;
    cout<<b[x][y]<<"  "<<w[t]<<endl;
 if(b[x][y]!=w[t]) return 0;
 //之前判断 
 //if(A[x][y]==t) return 0;
 //被用过
 if(b2[x][y]) return 0;
 b2[x][y]=1;
 if(f(w,t+1,x+1,y,b,b2)) return 1;
 if(f(w,t+1,x-1,y,b,b2)) return 1;
 if(f(w,t+1,x,y+1,b,b2)) return 1;
 if(f(w,t+1,x,y-1,b,b2)) return 1;
 return false;
}
    bool exist(vector<vector<char>>& b, string w) {
 vector<vector<char> > b2=b;
 for(int i=0;i<b.size();i++)
 for(int j=0;j<b[0].size();j++) b2[i][j]=0;
 int ok=0;
 for(int i=0;i<b.size();i++)
 for(int j=0;j<b[0].size();j++)
 {
         cout<<"---"<<endl;
  if(f(w,0,i,j,b,b2)) 
        {
            ok=1;
            break;
        }
 }
 if(ok==1) return 1;
 return 0;
    }
};

学习python:

def dfs(i, j, k):
            if not 0 <= i < len(board) or not 0 <= j < len(board[0]) or board[i][j] != word[k]: return False
            if k == len(word) - 1: return True
            tmp, board[i][j] = board[i][j], '/'
            res = dfs(i + 1, j, k + 1) or dfs(i - 1, j, k + 1) or dfs(i, j + 1, k + 1) or dfs(i, j - 1, k + 1)
            board[i][j] = tmp
            return res
        for i in range(len(board)):
            for j in range(len(board[0])):
                if dfs(i, j, 0): return True
        return False

学习点:
1.再强调函数内可以再套函数。
2.可以有x<y<z的形式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值