原题地址
一道DFS的题,但是我不太会运用,写了半天没写出来,上网看了一下思路,发现和我想的差不多,但是我的想法还是太麻烦了。
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <iomanip>
//#include <string.h>
#include <bits/stdc++.h>
#define INF 999999999
using namespace std;
int dp[17][17];
int vis[17][17]={0};
int mox[]={1,0};
int moy[]={0,1};
int sx,sy;
int ex,ey;
int n,r;
int falg,step=INF;
void dfs(int a, int b,int sum){
sum+=dp[a][b];
if(a<=n)//如果没搜到dp[n][r],继续搜
dfs(a+1,b,sum);
if(b<=r)//如果没搜到dp[n][r],继续搜
dfs(a,b+1,sum);
if(a==n&&b==r&&sum>0&&sum<step)//把sum和step最小的给step,且初始定义step为INF
step = sum;
}
int main()
{
//int n,r;
cin >>n>>r;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=r; j++)
{
cin >>dp[i][j];
}
}
dfs(1,1,0);
cout<<step<<endl;
return 0;
}