Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab / DM / algoritm_deyxtry

.cpp
Скачиваний:
11
Добавлен:
20.03.2016
Размер:
3.32 Кб
Скачать
#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