|
Задачи
Задачи для самостоятельного решения по теме "Кратчайшие пути из одной вершины"
-
Написать программу работы электронного авиадиспетчера. Авиалиния предоставляет возможность полета по 5 городам.
Стоимость полета в каждый из городов
известны. Пользователь запрашивает начальный и конечный город. Электронный авиадиспетчер выдает минимальную стоимость поездки (возможно
с пересадками).
Рассмотрим решение этой задачи:
Для решения будем использовать алгоритм Дейкстры (алгоритм поиска кратчайшего пути из одной вершины).
#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<<"Avialiniya predostavlyaet poleti v Moskvi, Tokio, London, Paris, Pekin"<<endl;
cout<<"esli bilet=0, znachit Avialiniya ne predostavlyaet poleti v etot gorod"<<endl;
n=5;
for(i=0;i<n;i++)
for(j=0;j<n;j++) c[i][j]=0;
c[0][1]=4; cout<<"Bilet ot Moskvi do Tokio = "; cout<<c[0][1]<<endl;
c[0][2]=8; cout<<"Bilet ot Moskvi do Londona = "; cout<<c[0][2]<<endl;
c[0][3]=2; cout<<"Bilet ot Moskvi do Paris = "; cout<<c[0][3]<<endl;
c[0][4]=1; cout<<"Bilet ot Moskvi do Pekina = "; cout<<c[0][4]<<endl;
c[1][2]=0; cout<<"Bilet ot Tokio do Londona = "; cout<<c[1][2]<<endl;
c[1][3]=1; cout<<"Bilet ot Tokio do Paris = "; cout<<c[1][3]<<endl;
c[1][4]=3; cout<<"Bilet ot Tokio do Pekina = "; cout<<c[1][4]<<endl;
c[2][3]=5; cout<<"Bilet ot Londona do Paris = "; cout<<c[2][3]<<endl;
c[2][4]=2; cout<<"Bilet ot Londona do Pekina = "; cout<<c[2][4]<<endl;
c[3][4]=1; cout<<"Bilet ot Paris do Pekina = "; cout<<c[3][4]<<endl;
cout<<" ";
for(i=0;i>xn;
cout<<"Vvedite konechnuy gorod (Moskvi=1, Tokio=2, London=3, Paris=4, Pekin=5):"<<endl;
cin>>xk;
xk--;
xn--;
if(xn==xk)
{
cout<<"Nachalnaya I konechnaya goroda 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<<"Stoimost puti: "<<l[p]<<endl;
}
else
cout<<"takogo puti ne syshestvuet!"<<endl;
getch();
}
|
- Дана сеть автомобильных дорог, соединяющих города Новосибирской области. Найти кратчайшие пути от Новосибирска до каждого города области (если двигаться можно только по дорогам).
-
Винни Пух решил сходить в гости к одному из своих друзей. Кролик живет на участке леса B,
Пятачок на участке леса C, Ослик Иа
на участке леса D, Сова на участке леса E. Чтоб добраться до одного из пунктов назначения, Винни Пуху необходимо
потратить определенное количество меда. Требуется найти до кого из своих друзей Винни Пух дойдет с наименьшими
затратами меда.
- Квадратное озеро задается матрицей M×N и покрыто мелкими островками.
В левом верхнем углу находится плот размером m×m.
За один шаг плот может передвигаться на одну клетку по вертикали или горизонтали.
Требуется определить кратчайший путь плота до правого нижнего угла.
- Найдите хотя бы одно решение или установите несовместимость следующей системы неравенств:
- Найдите хотя бы одно решение или установите несовместимость системы неравенств,
соответствующей следующему графу ограничений:
-
Из пункта A в пункт B необходимо проложить железную дорогу. Путь разбит на участки.
Затраты на проложение каждого из пути известны.
Требуется провести дорогу так, чтобы суммарные затраты на сооружение участка были минимальны.
-
Оля (A), Маша (B), Витя (C), Дима (D), Ваня (E) и Катя (F) живут в разных городах.
Стоимости билетов из разных городов известна.
Добраться до городов можно разными способами.
Определить наименьшую сумму, которую нужно потратить, чтобы Оля могла навестить каждого из своих друзей.
-
Имеется некоторое количество авиарейсов между городами мира, для каждого известна стоимость.
Найти маршрут минимальной стоимости (возможно, с пересадками) от Копенгагена до Барнаула.
-
Каждый автомобилист регулярно проходит технический осмотр в автосалоне.
Автомобиль в автосалоне проходит ряд этапов: ремонт, мойка, замена колес,
шиномонтаж, диагностика двигателя. Каждый из этапов имеет определенную стоимость. Порядок их выполнения может быть любым.
Любой технический осмотр начинается с мойки. Определить максимальный
набор услуг, котрый автовладелец может себе позволить за n рублей.
|