// bfs
#include <iostream>
#include <queue>
using namespace std;
const int N=12;
int G[N][N];
int s1[]={0,1};
int s2[]={1,0};
int outpu,m,n;
struct statu{
int aa,bb,valuee;
statu(){}
statu(int a,int b,int va){
aa=a;
bb=b;
valuee=va;
}
};
void bfs()
{
queue<statu>que;
que.push(statu(1,1,G[1][1]));
while(!que.empty())
{
statu st=que.front();
que.pop();
if(st.aa==m&&st.bb==n&&st.valuee>0)
{
outpu=min(outpu,st.valuee);
}
statu temp; // vital
for (int i=0;i<2;i++) //i=0 move left i=1 move down
{
temp.aa=st.aa+s1[i];
temp.bb=st.bb+s2[i];
temp.valuee=st.valuee+G[temp.aa][temp.bb];
if (temp.aa<=m&&temp.bb<=n)
{
que.push(statu(temp.aa,temp.bb,temp.valuee));
}
}
}
}
int main()
{
while (cin>>m>>n)
{
outpu=1000;
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
cin>>G[i][j];
}
}
bfs();
if (outpu<1000)
{
cout<<outpu<<endl;
}
else
cout<<-1<<endl;
}
return 0;
}
1158 pick numbers
最新推荐文章于 2014-04-04 00:01:34 发布