Pagini recente » Cod sursa (job #3127472) | Cod sursa (job #2599889) | Cod sursa (job #975126) | Cod sursa (job #287610) | Cod sursa (job #3142716)
#include <fstream>
#include <queue>
using namespace std;
ifstream in("lacusta.in");
ofstream out("lacusta.out");
long long n, m ;
long long dp [ 260 ] [260 ];
long long mat [ 260 ] [ 260 ] ;
long long distmin = 1e9 ;
queue<pair<int,int>> q;
long long last [ 260 ][ 260 ] ;
void lee ()
{
while ( !q.empty())
{
int i = q.front().first;
int j = q.front().second ;
for ( int k = 1 ; k <= m ; k ++ )
{
if ( k != j )
{
if ( i == n && k == m )
{
distmin = min ( distmin, dp [ i ] [ j ] + mat [ i ] [ k ]);
}
if ( i + 1 <= n )
{
if ( dp [ i ][ j ] + mat [ i + 1 ] [ k ] + mat [ i ] [ k ] < dp [ i + 1 ] [ k ] && ( i != n || k != m ) )
{
last [ i + 1] [ k ] = j ;
dp [ i + 1 ] [ k ] = dp [ i ] [ j ] + mat [ i + 1 ] [ k ] + mat [ i ] [ k ] ;
q.push( { i + 1, k }) ;
}
}
}
}
q.pop();
}
}
int main()
{
in >> n >> m;
for( int i = 1; i <= n ; i ++ )
{
for ( int j = 1; j <= m ; j ++ )
{
dp [ i ][ j ] = 1e9;
in >> mat [ i ] [ j ] ;
}
}
dp [ 1 ] [ 1 ] = mat [ 1 ][ 1 ] ;
q.push({1,1});
lee();
out << distmin ;
return 0;
}