Q
qazaq
задание такое - найти критический путь (путь наибольшей длины) от первой до последней вершины графа(дерева). причем дерево не обязательно бинарное. может быть и 3-арное и тд.
еще заданы расстояние между вершинами.
код ща вставлю...
у мя неполучаеца именно найти путь...
результат должен быть тип такой
1-2-5-9-15 // это путь
17 //это сумма расстояний (5+3+2+7).
еще заданы расстояние между вершинами.
код ща вставлю...
у мя неполучаеца именно найти путь...
результат должен быть тип такой
1-2-5-9-15 // это путь
17 //это сумма расстояний (5+3+2+7).
Код:
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include "Rus.h"
#define max_size 100
int matr_sm[50][50],stek1[max_size],stek2[max_size];
int next=0,n,i,j;
void vvod()
{
ifstream fin("graf.txt", ios::in||ios::nocreate);
int v1,v2;
cout<<(Rus("Введите кол-во вершин в графе:"))<<endl;
cin>>n;
for (i=0;i<n;i++)
{
fin>>v1;
fin>>v2;
fin>>matr_sm[v2-1][v1-1];
}
}
void vivod()
{
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<matr_sm[j][i]<<" ";
cout<<endl;
}
}
void poisk()
{
int max,t=0,k;
max=matr_sm[0][0];
k=0;i=0;j=0;
do
{
do
{
if (matr_sm[i][j]>max)
{
max=matr_sm[i][j];
t=i;
}
//cout<<"T="<<t<<endl;
i++;
}
while(i<n);
j++;
next++;
if (max==0)
{
break;
}
stek1[next-1]=max;
max=matr_sm[0][0];
k++;
}
while(k!=n);
for(i=0;i<next-1;i++)
cout<<stek1[i]<<endl;
}
//второй вариант
/*void poisk2(int v)
{
int w,j=0;
stek1[v]=1;
printf("%i ",v+1);
for(i=0;i<n;i++)
{
if (matr_sm[i][j]>max)
max=matr_sm[i][j];
}
for (w=0;w<n;w++)
if (matr_sm[v][w]==1);
else if (stek1[w]==0)
poisk(w);
}
*/
void main()
{
vvod();
cout<<endl;
cout<<(Rus("МАТРИЦА СМЕЖНОСТИ"))<<endl;
vivod();
cout<<endl;
cout<<(Rus("РЕЗУЛЬТАТ ПОИСКА КРИТИЧЕСКОГО ПУТИ"))<<endl;
// for (int v=0;v<n;v++) stek1[v]=0;
// for (int v=0;v<n;v++)
//if (stek1[v]==0)
// poisk2(v);
poisk();
}