: 1
: 7
: X1-X4-X7
: 29
, : X1-X4-X7 : 29, .
, , Microsoft Visual C++ 6.0. Ÿ . , , .
. . , , . .
: n - k ? , , -. .
1. , , , 1968.
2. .., , Akademia 1999 .
3. .., - .. . .: , 1988.
4. ., . . .: , 1990.
5. .., .. . .: , 1992.
6. . . .: , 1980.
7. .., .. p p p: p : p p. - .: , 1995
8. .. p p. .: , 1992
9. Hp .. p pp p p . - Hp: H, 1990
10. .. p p p . - .: H, 1977
11. . . - .: , 1988
12. .. . - .: , 1992
13. .., .. . - .: - , 1994
.
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define word unsigned int
int i, j, n, p, xn, xk;
int flag[11];
word c[11][11], l[11];
char s[80], path[80][11];
int min(int n)
{int i, result;
for(i=0;i<n;i++)
if(!(flag[i])) result=i;
for(i=0;i<n;i++)
if((l[result]>l[i])&&(!flag[i])) result=i;
return result;}
word minim(word x, word y)
{if(x<y) return x;
return y;}
void main()
|
|
{cout<<"Vvedite kolichestvo tochek: ";
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++) c[i][j]=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{cout<<"Vvedite rasstoyanie ot x"<<i+1<<" do x"<<j+1<<": ";
cin>>c[i][j];}
cout<<" ";
for(i=0;i<n;i++) cout<<" X"<<i+1;
cout<<endl<<endl;
for(i=0;i<n;i++)
{printf("X%d",i+1);
for(j=0;j<n;j++)
{printf("%6d",c[i][j]);
c[j][i]=c[i][j];}
printf("\n\n");}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(c[i][j]==0) c[i][j]=65535; //
cout<<"Vvedite nachalnuy tochku: ";
cin>>xn;
cout<<"Vvedite konechnuy tochku: ";
cin>>xk;
xk--;
xn--;
if(xn==xk)
{cout<<"Nachalnaya I konechnaya tochki sovpadayt."<<endl;
getch();
return;}
for(i=0;i<n;i++)
{flag[i]=0;
l[i]=65535;}
l[xn]=0;
flag[xn]=1;
p=xn;
itoa(xn+1,s,10);
for(i=1;i<=n;i++)
{strcpy(path[i],"X");
strcat(path[i],s);}
do
{for(i=0;i<n;i++)
if((c[p][i]!=65535)&&(!flag[i])&&(i!=p))
{if(l[i]>l[p]+c[p][i])
{itoa(i+1,s,10);
strcpy(path[i+1],path[p+1]);
strcat(path[i+1],"-X");
strcat(path[i+1],s);}
l[i]=minim(l[i],l[p]+c[p][i]);}
p=min(n);
flag[p]=1;}
while(p!=xk);
if(l[p]!=65535)
{cout<<"Put: "<<path[p+1]<<endl;
cout<<"Dlina puti: "<<l[p]<<endl;}
else
cout<<"takogo puti ne syshestvuet!"<<endl;
getch();}