#include <iostream> #include <queue> using namespace std; int row,clo; struct node{ int x; int y; int sum; }; int dx[]={0,1}; int dy[]={1,0}; bool check(int a,int b) { if(a>=1&&a<=row&&b>=1&&b<=clo){ return true; } else return false; } int main() { int matrix[11][11]; while(cin>>row) { cin>>clo; int min=1000; for(int i=1;i<=row;i++) for(int j=1;j<=clo;j++) cin>>matrix[i][j]; queue<node>store; node current; current.sum=matrix[1][1]; current.x=1; current.y=1; store.push(current); //cout<<store.front().sum<<endl; while(store.size()) { node temp=store.front(); store.pop(); if(temp.x==row&&temp.y==clo&&temp.sum<min&&temp.sum>0) min=temp.sum; for (int k=0;k<2;k++) { if(check(temp.x+dx[k],temp.y+dy[k])) { node cur; cur.x=temp.x+dx[k]; cur.y=temp.y+dy[k]; cur.sum=temp.sum+matrix[cur.x][cur.y]; store.push(cur); } } } if(min==1000) cout<<"-1"<<endl; else cout<<min<<endl; } return 0; } 又一道题用广度优先搜索解决,但这是很模块化,死板的代码