问题
一个二维数组(样例如下)
6,6(行列)
{0,0,0,0,0,0
1,2,3,4,5,6
2,3,4,5,6,7
3,4,5,6,7,8
1,1,3,6,5,4
0,0,0,0,0,0
}
取一条从左上到右下路径,找出路径元素的最大值,让这个最大值最小。
输出:3(路径:0,1,2,3,1,0,0,0,0,0,0)
我的尝试
#include<bits/stdc++.h>
using namespace std;
int maxest(int a,int b)//取最大值
{
return a>b?a: b;
}
int minPathSum(vector<vector<int>> &grid)
{
int row=grid.size(),col=grid[0].size();
for(int i=1; i<col;++i)
{
grid[0][i]=maxest(grid[0][i],grid[0][i - 1]);
}
for(int i=1; i<row;++i)
{
grid[i][0]=maxest(grid[i][0],grid[i - 1][0]);
}
for(int i=1;i<row;++i)
{
for(int j=1;j<col;++j)
{
grid[i][j]=maxest(min(grid[i - 1][j], grid[i][j - 1]),grid[i][j]);
}
}
return grid[row - 1][col - 1];
}
int input()
{
int a;
cin>>a;
return a;
}
int main()
{
vector<vector<int>> arr;
vector<int> a;
int n,m;
cin>>n>>m;
int temp=0;
for (int i=0;i<n;i++)
{
a.clear();
for(int j=0;j<m;j++)
{
cin>>temp;
a.push_back(temp);
}
arr.push_back(a);
}
int ans=minPathSum(arr);
cout<<ans<<endl;
return 0;
}
输入:
4 2
0 0
3 5
2 4
0 0
输出:
3
过程:
0->3->2->0->0
求解