Cod sursa(job #525508)

Utilizator elis_j4jTimofte Elisei elis_j4j Data 25 ianuarie 2011 13:38:59
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream.h>
const int max=1000;

ifstream f("roifloid.in");
ofstream g("roifloid.out");
int a[30][30],n,m,i,j,x,y;
void citire()
{f>>n>>m;
 for(i=1; i<=n; i++)
	for(j=1; j<=n; j++)
	if(i!=j)a[i][j]=max;
 for(int l=1; l<=m; l++)
	{f>>i>>j>>a[i][j];
	 a[j][i]=a[i][j];
	}
 f>>x>>y;
 f.close();
}

void afisare()
{for(int i=1; i<=n; i++)
	{for(int j=1; j<=n; j++)
		g<<a[i][j]<<" ";
	 g<<'\n';
	}
 g<<'\n';
}

void calcul()
{for(int k=1; k<=n; k++)
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
			if(i!=k && j!=k && i!=j)
			if(a[i][j]>a[i][k]+a[k][j])
				a[i][j]=a[i][k]+a[k][j];
}

void traseu(int x, int y)
{int gasit=0;
 for(int k=1; k<=n && !gasit; k++)
	{if(x!=k && y!=k && x!=y)
	 if(a[x][y]==a[x][k]+a[k][y])
		{traseu(x,k);
		 traseu(k,y);
		 gasit=1;
		} 
	}	
 if(gasit==0)g<<y<<" ";

}

int main()
{citire();
 afisare();
 calcul();
 afisare();
 if(a[x][y]<max)
	{g<<x<<" ";
     traseu(x,y);
	}
 else g<<"nu exista cale de acces";
 g.close();
 return 0;
}