解题思路:原来以为用动态规划可以做,但是题目要求是最小的非负整数,动态规则中有可能为负数.所以采用深搜或者广搜都行.
#include <iostream>
#include <memory.h>
using namespace std;
int m,n;
int matrix[11][11];
bool visited[11][11];
int result;
void dfs(int x,int y,int sum)
{
sum += matrix[x][y];
if(x == m && y == n && sum > 0)
{
if(result == -1)
result = sum;
else
result = min(sum,result);
}
if(x < m)//向下
{
visited[x + 1][y] = true;
dfs(x + 1,y,sum);
visited[x + 1][y] = false;
}
if(y < n)//向右
{
visited[x][y + 1] = true;
dfs(x,y + 1,sum);
visited[x][y + 1] = false;
}
}
int main()
{
while(cin >> m >> n)
{
memset(matrix,0,sizeof(matrix));
for(int i = 1; i <= m;i++)
for(int j = 1;j <= n;j++)
cin >> matrix[i][j];
memset(visited,false,sizeof(visited));
visited[1][1] = true;
result = -1;
dfs(1,1,0);
cout << result << endl;
}
return 0;
}