Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <iostream>
int rak(int *b);
int ppc(int,int);
int n =14;
using namespace std;
int main()
{
int x,n=14;
int c[14][14],f[14][14],i,j,ff[14];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c[i][j] = f[i][j] = -1;
c[0][1]=f[0][1] = 4; //ab
c[0][8]=f[0][8] = 6; //ai
c[0][9]=f[0][9] = 9; //ak
c[0][11]=f[0][11] = 13; //am
c[1][2]=f[1][2] = 13;
c[1][11]=f[1][11] = 13;
c[2][3]=f[2][3] = 13;
c[2][4]=f[2][4] = 4;
c[2][11]=f[2][11] = 4;
c[2][12]=f[2][12] = 5;
c[3][4]=f[3][4] = 5;
c[3][13]=f[3][13] = 8;
c[4][5]=f[4][5] = 8;
c[4][10]=f[4][10] = 4;
c[4][12]=f[4][12] = 7;
c[4][13]=f[4][13] = 5;
c[5][6]=f[5][6] = 6;
c[5][10]=f[5][10] = 6;
c[5][13]=f[5][13] = 11;
c[6][7]=f[6][7] = 12;
c[6][10]=f[6][10] = 9;
c[6][13]=f[6][13] = 8;
c[7][8]=f[7][8] = 12;
c[7][10]=f[7][10] = 9;
c[8][9]=f[8][9] = 5;
c[8][10]=f[8][10] = 9;
c[9][10]=f[9][10] = 7;
c[9][11]=f[9][11] = 8;
c[10][11]=f[10][11] = 4;
c[10][12]=f[10][12] = 8;
c[11][12]=f[11][12] = 7;
cout<<endl<<endl;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
f[i][j] = f[j][i];
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cout<<f[i][j]<<" ";
cout<<endl;
}
int dist[14],k,m=0;
for(i =0;i<30;i++)
dist[i]=0;
i=0;
j=0;
int z=0,*min,*a,cok[14];
min = new int [n];
a = new int [n];
for(i=0;i<n;i++)
a[i] = -1;
i=0;
a[0] = 10000;
//cout<<endl<<endl<<endl;
while(j!=13)
{
for(int k=0; k<n ; k++)
{
if(f[i][k]>0 && a[k] != 10000)
{
a[k] = ppc(a[k], z+f[i][k]);
}
if(a[k]!= 10000)
{cok[k] = a[k];
// cout<<a[k]<<" ";
}
// else cout<<" - ";
}
// cout<<endl;
j = rak(a);
//cout<<endl<<i<<" "<<j<<" = "<<f[i][j]<<endl<<"+"<<a[j]<<" = "<<endl;
dist[m]=a[j];
m++;
z = a[j];
a[j] = 10000;
f[i][j] = -1;
i=j;
}
//for(i=0;i<n;i++)
//cout<<dist[i]<<" ";
int kekc;
for(i=0;i<n;i++)
if(dist[i]==0)
kekc = dist[i-1];
x=kekc;
cout<<endl<<endl<<endl;
// for(i=0;i<n;i++)
// cout<<cok[i]<<" ";
i=0;
j=13;
char dm[14];
dm[0]='A';
dm[1]='B';
dm[2]='V';
dm[3]='G';
dm[4]='D';
dm[5]='E';
dm[6]='J';
dm[7]='Z';
dm[8]='I';
dm[9]='K';
dm[10]='L';
dm[11]='M';
dm[12]='N';
dm[13]='O';
int krest[14];
for(i=0;i<n;i++)
krest[i] = 0;
i=0;
z=13;
while(j!=0)
{
for(i=0;i<n;i++)
if(kekc==cok[i]+f[i][j])
break;
//cout<<dm[i];
kekc = cok[i];
j=i;
krest[z] = i;
z--;
}
cout<<endl<<endl<<endl<<"Minimal length of way = "<<x<<endl<<"The way is:"<<endl<<"A->";
for(i=0;i<n;i++)
if(krest[i]!=0)
cout<<dm[krest[i]]<<"->";
cout<<"O";
delete a;
delete min;
return 0;
}
int ppc(int a, int b)
{
if(a==-1)
return b;
else if(b==-1)
return a;
else if(a<=b)
return a;
return b;
}
int rak( int *a)
{
int min = 100;
for(int i = 0; i < n ; i++)
min = ppc(min,a[i]);
for(int i=0;i<n;i++)
if(a[i] == min)
return i;
}
Соседние файлы в папке DM