dfs(深度优先搜素)poj1088
2012-09-17 21:25
330 查看
题目链接:http://poj.org/problem?id=1088
题目解析:要求出最长的降序子序列,遍历四个方向记忆化搜索;
题目解析:要求出最长的降序子序列,遍历四个方向记忆化搜索;
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int dp[101][101],a[101][101]; int n,i,j,k,m; int dfs(int x,int y){ if(dp[x][y]!=0) return dp[x][y]; if(x==0||x==n+1||y==0||y==m+1) return 0; int maxn=0; if(a[x-1][y]<a[x][y]) maxn=max(maxn,dfs(x-1,y)); if(a[x+1][y]<a[x][y]) maxn=max(maxn,dfs(x+1,y)); if(a[x][y-1]<a[x][y]) maxn=max(maxn,dfs(x,y-1)); if(a[x][y+1]<a[x][y]) maxn=max(maxn,dfs(x,y+1)); dp[x][y]=maxn+1; return dp[x][y]; } int main(){ while(cin>>n>>m){ memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j]; for(i=1;i<=n;i++) for(j=1;j<=m;j++) dfs(i,j); int ans=-1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(dp[i][j]>ans) ans=dp[i][j]; cout<<ans<<endl; } return 0; }
相关文章推荐
- HDU 2181 哈密顿绕行世界问题(DFS 深度优先搜素)
- DFS深度优先搜索之lake counting
- 勘探油田(简单的程序设计)图的深度优先和广度优先算法(DFS递归)
- DFS深度优先搜索简单案例:Coin解决方案
- 深度优先搜寻(DFS) C语言实现
- 图论基础-深度优先遍历DFS
- 深度优先遍历!!DFS
- DFS--深度优先搜索--图的邻接矩阵
- 深度优先搜索DFS(depth first search),拓扑排序
- DFS-深度优先搜索—2
- 数据结构(二) 深度优先遍历 DFS
- leetcode 37. Sudoku Solver 一个经典的DFS深度优先搜索的做法
- 第11周项目3-图遍历算法实现(深度优先DFS)
- leetcode 526. Beautiful Arrangement 递归实现全排列 + 经典深度优先遍历DFS做法
- leetcode 669. Trim a Binary Search Tree 修建二叉搜索树BST + 深度优先遍历DFS
- leetcode 113. Path Sum II DFS深度优先遍历
- leetcode 655. Print Binary Tree 矩形打印二叉树 + 深度优先遍历DFS
- leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
- leetcode 131. Palindrome Partitioning 按照index做DFS深度优先遍历
- 图的遍历之-DFS深度优先遍历C++实现