Если компилировать ту же прогу тем же компилятором под Windows или wine, то возникает переполнение стека. Если объявление массива разместить перед функцией main(), то все работает. Почему изначальный вариант глючит?
Исходный код, который глючит в Windows:
Код:
#include <fstream>
using namespace std;
int imin(int a,int b)
{
return a<b ? a : b;
}
int main()
{
int g[101][101][101];
int n,k,i,j;
ifstream in("input.txt");
ofstream out("output.txt");
in>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
in>>g[0][i][j];
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g[k][i][j]=imin(g[k-1][i][j],g[k-1][i][k]+g[k-1][k][j]);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(j==1)out<<g[n][i][j];else out<<' '<<g[n][i][j];
out<<'\n';
}
in.close();
out.close();
return 0;
}Исходный код, который работает под Windows:
Код:
#include <fstream>
using namespace std;
int imin(int a,int b)
{
return a<b ? a : b;
}
int g[101][101][101];
int main()
{
int n,k,i,j;
ifstream in("input.txt");
ofstream out("output.txt");
in>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
in>>g[0][i][j];
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g[k][i][j]=imin(g[k-1][i][j],g[k-1][i][k]+g[k-1][k][j]);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(j==1)out<<g[n][i][j];else out<<' '<<g[n][i][j];
out<<'\n';
}
in.close();
out.close();
return 0;
}