1086 花生采摘
很简单的搜索,广度优先,没有什么
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
const int N=30;
int mp[N][N];
int n,m,k;
int tm;
int fx,fy,ex,ey;
int pn;
int ans;
struct dire
{
int x,y,sum;
}stu[N*N];//类似于一个队列的东西,广度
bool comp(struct dire a,struct dire b)
{
return a.sum>b.sum;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];//简单的存图
if(mp[i][j]>0)
{
stu[++pn].sum=mp[i][j];
stu[pn].x=i;
stu[pn].y=j;//横纵坐标
}
}
}
sort(stu+1,stu+pn+1,comp);
fx=1;
fy=stu[1].y;//指的是终点
k--;
for(int i=1;i<=pn;i++)
{
tm=0;
ex=stu[i].x;
ey=stu[i].y;//获取当前的坐标
tm=abs(fx-ex)+abs(fy-ey);//绝对值得距离
k--;
k-=tm;
if(k>=ex)
{
ans+=mp[ex][ey];//答案相加
fx=ex;
fy=ey;//改变最近点
}
else
{
cout<<ans<<endl;
return 0;
}
}
cout<<ans<<endl;
return 0;
}
广度优先搜索