Форум программистов, компьютерный форум CyberForum.ru

Задана система двусторонних дорог - C++

Восстановить пароль Регистрация
 
ien_brave
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 10
30.09.2013, 00:38     Задана система двусторонних дорог #1
Задана система двусторонних дорог.
N-периферией называется множество городов, расстояние от которых
до выделенного города больше N. Определить N периферию для заданного города.


вот реализация в Pascal. Помогите перевести в C++ да и вообще разобраться что к чему

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Program s4l3; 
const n=4; 
type 
    matrix=array[1..n,1..n] of real; 
    names=array[1..n] of string; 
    proverka=array[1..n] of boolean; 
var m:matrix; 
    name:names; 
    i,j,gorod:integer; 
    city:string; 
    r:real; 
    ok,f:boolean; 
    p:рroverka; 
 
Procedure vvod(var m:matrix;var name:names); 
var i,j,k:integer; 
    buf:real; 
begin 
     for i:=1 to n do 
     begin 
          writeln('Введите названия ',i,' города'); 
          readln(name[i]); 
     end; 
     k:=1; 
     for i:=1 to n do 
     m[i,i]:=0; 
     for i:=1 to n do 
     begin 
          k:=k+1; 
          for j:=k to n do 
          begin 
               writeln('Введите расстояние от ',name[i],' до ',name[j]); 
               readln(buf); 
               m[i,j]:=buf; 
               m[j,i]:=buf; 
          end; 
     end; 
end; 
 
Procedure Perif(p:рroverka; ras:real; stroka:integer); 
var x:integer; 
begin 
     ok:=true; 
     x:=1; 
     while (x<=n)and(ok) do 
     begin 
          if (m[stroka,x]<>0)and(p[x]) then 
          begin 
               ras:=ras+m[stroka,x]; 
               p[x]:=false; 
               if x=i then 
               begin 
                    if (ras<=r)and(ras<>0) then //begin 
                    ok:=false; //writeln('FALSE ',name[i],' ',ras,' ',r,' ',i); end; 
               end 
               else 
                   perif(p,ras,x); 
               ras:=ras-m[stroka,x]; 
          end; 
          x:=x+1; 
     end; 
end; 
 
Begin 
     vvod(m,name); 
     for i:=1 to n do 
         for j:=1 to n do 
          writeln(name[i],' - ',name[j],': ', m[i,j],' '); 
     writeln('Введите расстояние'); 
     readln(r); 
     city:=''; 
     f:=false; 
     while not f do 
     begin 
          writeln('Выберите город'); 
          readln(city); 
          for i:=1 to n do 
          if city=name[i] then 
             begin 
                  f:=true; 
                  gorod:=i; 
             end; 
          if f then break 
          else 
            writeln('неправильный город!'); 
     end; 
     for i:=1 to n do 
         p[i]:=true; 
     writeln('N-переферия города ',name[gorod]); 
     for i:=1 to n do 
     begin 
          if i<>gorod then 
          begin 
               perif(p,0,gorod); 
               if ok then 
                  writeln(name[i]); 
          end; 
     end; 
     if not ok then writeln('таких городов нет'); 
End.

вот вроде чуть чуть начал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Program s4l3; 
const n=4; 
type 
    matrix=array[1..n,1..n] of real; 
    names=array[1..n] of string; 
    proverka=array[1..n] of boolean; 
var m:matrix; 
    name:names; 
    i,j,gorod:integer; 
    city:string; 
    r:real; 
    ok,f:boolean; 
    p:proverka; 
 
Procedure vvod(var m:matrix;var name:names); 
var i,j,k:integer; 
    buf:real; 
{ 
   for (i=1; i!=n; i++) 
     { 
          printf('Введите названия ',i,' города'); 
          scanf(name[i]); 
     }; 
     k=1; 
     for (i=1; i!=n; i++)
     m[i,i]=0; 
for (i=1; i!=n; i++)
     { 
          k=k+1; 
          for j=k to n do 
          { 
               printf('Введите расстояние от ',name[i],' до ',name[j]); 
               scanf(buf); 
               m[i,j]=buf; 
               m[j,i]=buf; 
          }; 
     }; 
}; 
 
Procedure Perif(p:proverka; ras:real; stroka:integer); 
var x:integer; 
{ 
     ok=true; 
     x=1; 
     while (x<=n)and(ok) do 
     { 
          if (m[stroka,x]<>0)and(p[x]) then 
          { 
               ras=ras+m[stroka,x]; 
               p[x]=false; 
               if x=i then 
               { 
                    if (ras<=r)and(ras<>0) then //{ 
                    ok=false; //printf('FALSE ',name[i],' ',ras,' ',r,' ',i); }; 
               } 
               else 
                   perif(p,ras,x); 
               ras=ras-m[stroka,x]; 
          }; 
          x=x+1; 
     }; 
}; 
 
{ 
     vvod(m,name); 
for (i=1; i!=n; i++)
         for (j=1; j!=n; j++)
          printf(name[i],' - ',name[j],': ', m[i,j],' '); 
     printf('Введите расстояние'); 
     scanf(r); 
     city=''; 
     f=false; 
     while not f do 
     { 
          printf('Выберите город'); 
          scanf(city); 
         for (i=1; i!=n; i++)
          if city=name[i] then 
             { 
                  f=true; 
                  gorod=i; 
             }; 
          if f then break 
          else 
            printf('неправильный город!'); 
     }; 
for (i=1; i!=n; i++)
         p[i]=true; 
     printf('N-переферия города ',name[gorod]); 
     for (i=1; i!=n; i++)
     { 
          if i<>gorod then 
          { 
               perif(p,0,gorod); 
               if ok then 
                  printf(name[i]); 
          }; 
     }; 
     if not ok then printf('таких городов нет'); 
}.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2013, 00:38     Задана система двусторонних дорог
Посмотрите здесь:

C++ Задана матрица
C++ задана матрица m*n
C++ В системе двухсторонних дорог за проезд каждой дороги взимается некоторая пошлина.
C++ По системе двусторонних дорог определить, можно ли, закрыв какие-нибудь три дороги, добиться того, чтобы из города A нельзя было попасть в город B
Задана строка имен программ C++
C++ задача на систему дорог
C++ По карте дорог необходимо определить самый удалённый город.
Определить есть ли в системе дорог город, куда можно попасть из любого другого, проезжая не более 100км C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ien_brave
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 10
24.11.2013, 17:20  [ТС]     Задана система двусторонних дорог #2
помогите исправить ошибки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "stdafx.h"
#include "stdio.h"
#include "string"
#include "conio.h"
#define NMAX 4 
void vvod( double m[NMAX][NMAX], char city[50])
    {
        using namespace std;
        int i,j,k;
        double buf;
        string name[NMAX];
        for (i=0; i<NMAX; i++)
        {
            printf("Введите названия %d города", i);
            scanf(name[i]);
        }
        k=0;
        for (i=0; i<NMAX; i++)
        m[i][i]=0;
        for (i=0; i<NMAX; i++)
        {
            k++;
            for (j=k; j<NMAX; j++)
            {
                printf("Введите расстояние от %d до %d города", name[i], name[j]);
                scanf(buf);
                m[i][j]=buf;
                m[j][i]=buf;
            }
        }
    }
 
void perif(bool p[NMAX], double ras, int stroka)
    {
        bool ok=1;
        double r;
        int x=0,n,i=0;
        double m[NMAX][NMAX];
        while (x<=n && ok)
          if ((m[stroka][x]!=0) && (p[x])) 
          { 
               ras+=m[stroka][x]; 
               p[x]=0; 
               if (x=i)
                   if ((ras<=r) && (ras!=0)) //begin 
                    ok=0; //writeln('FALSE ',name[i],' ',ras,' ',r,' ',i); end; 
               else 
                   perif(p,ras,x); 
               ras-=m[stroka][x]; 
          } 
          x++; 
    } 
 
 
int main()
{
    
    using namespace std;
    double m[NMAX][NMAX];
    string name[NMAX];
    bool p[NMAX];
    string city;
    int i,j,gorod;
    bool ok,f;
    double r;
    int n;
 
 
    vvod(m, name); 
     for (i=0; i<NMAX; i++) 
         for (j=0; i<NMAX; j++) 
             printf("%d - %d : %d",name[i],name[j], m[i,j]); 
     printf("Введите расстояние"); 
     scanf(r); 
     city=0; 
     f=0; 
     while (f!=1) 
     { 
          printf("Выберите город"); 
          scanf(city); 
          for (i=0; i<NMAX; i++) 
          if (city==name[i])
          { 
                  f=1; 
                  gorod=i; 
          } 
          if (f)
              break;
          else 
            printf("неправильный город!"); 
     } 
     for (i=0; i<NMAX; i++)
         p[i]=1; 
     printf("N-переферия города %d",name[gorod]); 
     for (i=0; i<NMAX; i++)
         if (i!=gorod)
            perif(p,0,gorod); 
               if (ok)
                  printf(name[i]);
               if (ok==0)
                   printf("таких городов нет");
getch();
return 0;
}
Yandex
Объявления
24.11.2013, 17:20     Задана система двусторонних дорог
Ответ Создать тему
Опции темы

Текущее время: 03:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru