Cod sursa(job #1706212)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 21 mai 2016 21:55:47
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#define MAXN 100
#define INF 1000000000
int cost[MAXN+1][MAXN+1],d[MAXN+1][MAXN+1][2];
inline int getmin(int a,int b){
   if(a<b) return a;
   return b;
}
int main(){
    FILE*fi,*fout;
    int i,j,n,k;
    fi=fopen("royfloyd.in" ,"r");
    fout=fopen("royfloyd.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=1;i<=n;i++)
     for(j=1;j<=n;j++){
        fscanf(fi,"%d" ,&cost[i][j]);
        if(cost[i][j]==0)
           cost[i][j]=INF;
    }
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
          d[i][j][0]=cost[i][j];
    for(k=1;k<=n;k++)
      for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
           if(i!=j)
               d[i][j][k&1]=getmin(d[i][j][1-k&1],d[i][k][1-k&1]+d[k][j][1-k&1]);
    for(i=1;i<=n;i++){
       for(j=1;j<=n;j++){
          if(d[i][j][n&1]>=INF)
             fprintf(fout,"0 ");
          else
             fprintf(fout,"%d " ,d[i][j][n&1]);
       }
       fprintf(fout,"\n");
    }
    fclose(fi);
    fclose(fout);
    return 0;
}