Cod sursa(job #265938)

Utilizator rayvianPricope Razvan rayvian Data 24 februarie 2009 19:14:56
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;

int v[100][100];
int noduri;

int sel[100];
int par[100];
int dist[100];

void citire();
void afisare();
void init();

int startNOD=1;

void dijkstra(int k)
{
	sel[k]=true;
	int DIM=0;
	int NOD=0;
	for(int i=2; i<=noduri; i++)
  {
		if((dist[i] > dist[k]+v[k][i] || dist[i]==0) && v[k][i]!=0 )
		{
			dist[i]=dist[k]+v[k][i];
		}
    if(sel[i]==false && (DIM > dist[i] || DIM==0) && dist[i]!=0 )
    {
    	DIM=dist[i];
      NOD=i;
    }
  }

	if(DIM!=0)
  	dijkstra(NOD);

}

int main()
{
	citire();
	dijkstra(1);
	/*dijkstra(2);
  dijkstra(4);
  dijkstra(3);*/
	//init();
	afisare();
  cin.sync();
  cin.get();
	return 0;
}


void init()
{
	for(int i=1; i<=noduri; i++)
		if(v[1][i]!=0)
			dist[i]=v[1][i];

}


void afisare()
{
	/*for(int i=1; i<=noduri; i++)
	{
		cout<<endl;
		for(int j=1; j<=noduri; j++)
			cout<<v[i][j]<<" ";
	}
	cout<<endl<<endl;
	for(int i=1; i<=noduri; i++)
		cout<<sel[i]<<" ";
	cout<<endl;
	for(int i=1; i<=noduri; i++)
		cout<<par[i]<<" ";
	cout<<endl;
	for(int i=1; i<=noduri; i++)
		cout<<dist[i]<<" ";
    */
  fstream g;
  g.open("dijkstra.out",ios::out);

  for(int i=2; i<=noduri; i++)
  	g<<dist[i]<<" ";

  g.close();
}

void citire()
{
	fstream f;
	f.open("dijkstra.in",ios::in);
	int muchii;
	f>>noduri>>muchii;

	for(int i=1; i<=muchii; i++)
	{
		int x,y,z;
		f>>x>>y>>z;
		v[x][y]=z;
		v[y][x]=z;
	}
	f.close();
}