给定经过矩阵每个cell的代价,求从0,0到n-1,n-1最小代价
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
queue<int> q;
int N,ipt[200][200],dis[200][200],dx[]={-1,1,0,0},dy[]={0,0,-1,1};
void bfs()
{
int t=0,s,x,y,nx,ny;
memset(dis,-1,sizeof(dis));
q.push(t);
dis[0][0]=ipt[0][0];
while(!q.empty())
{
s=q.front();
x=s/N;
y=s%N;
for(int i=0;i<4;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if(nx>=0&&nx<N&&ny>=0&&ny<N)
{
if(dis[nx][ny]==-1||dis[x][y]+ipt[nx][ny]<dis[nx][ny])
{
dis[nx][ny]=dis[x][y]+ipt[nx][ny];
t=nx*N+ny;
q.push(t);
}
}
}
q.pop();
}
}
int main()
{
int count=1;;
while(cin>>N&&N)
{
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
cin>>ipt[i][j];
bfs();
cout<<"Problem "<<count<<": "<<dis[N-1][N-1]<<endl;
count++;
}
//return 0;
}