I am using Floyd–Warshall algorithm and computing minimum costs between all the pairs.
Can you please look at the code and help me figure out my mistake.
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int v=8*8;
int dist[v][v];
for (int i = 0; i < v; ++i)
{
for (int j = 0; j < v; ++j)
{
dist[i][j]=-1;
}
}
for (int i = 0; i < 8; ++i)
{
for (int j = 0; j < 8; ++j)
{
int curr = i*8+j;
dist[curr][curr]=0;
if(i+2<8 && j+1<8){
dist[curr+17][curr]=i*(i+2)+j*(j+1);
dist[curr][curr+17]=i*(i+2)+j*(j+1);
}
if(i-2>=0 && j+1<8){
dist[curr-15][curr]=i*(i-2)+j*(j+1);
dist[curr][curr-15]=i*(i-2)+j*(j+1);
}
if(i+2<8 && j-1>=0){
dist[curr+15][curr]=i*(i+2)+j*(j-1);
dist[curr][curr+15]=i*(i+2)+j*(j-1);
}
if(i-2>=0 && j-1>=0){
dist[curr-17][curr]=i*(i-2)+j*(j-1);
dist[curr][curr-17]=i*(i-2)+j*(j-1);
}
if(j+2<8 && i+1<8){
dist[curr+10][curr]=i*(i+1)+j*(j+2);
dist[curr][curr+10]=i*(i+1)+j*(j+2);
}
if(j-2>=0 && i+1<8){
dist[curr+6][curr]=i*(i+1)+j*(j-2);
dist[curr][curr+6]=i*(i+1)+j*(j-2);
}
if(j+2<8 && i-1>=0){
dist[curr-6][curr]=i*(i-1)+j*(j+2);
dist[curr][curr-6]=i*(i-1)+j*(j+2);
}
if(j-2>=0 && i-1>=0){
dist[curr-10][curr]=i*(i-1)+j*(j-2);
dist[curr][curr-10]=i*(i-1)+j*(j-2);
}
}
}
for (int i = 0; i < v; ++i)
{
for (int j = 0; j < v; ++j)
{
for (int k = 0; k < v; ++k)
{
if((dist[i][k]!=-1&&dist[k][j]!=-1) && (dist[i][j]==-1 || dist[i][j]>dist[i][k]+dist[k][j])){
dist[i][j]=dist[i][k]+dist[k][j];
}
}
}
}
int a,b,c,d;
while (!cin.eof())
{
cin>>a>>b>>c>>d;
cout<<dist[a*8+b][c*8+d]<<endl;
}
return 0;
}
Found the issue, messed up the order of i,j,k in the loops
Ignore