М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Schoolboy0770
Schoolboy0770
04.11.2020 10:19 •  Информатика

Код не выводит правильно информацию про двудольность графов,подскажите где ошибка
#include

using namespace std;

vector graph[100000];
char color[100000];

inline char invert(int c) {
return c == 1 ? 2 : 1;
}

void dfs(int v, char c) {
color[v] = c;

for (int u : graph[v]) {
if (color[u] == 0) {
dfs(u, invert(c));
}
else if (color[u] == c) {
cout << "Graph ne dvydolniy." << endl;
exit(0);
}
}
}

int main() {
const int n = 6;
bool bipartite_graph = true;
vector> graph =
{
{1,0,1,0,1,0},
{1,0,1,0,1,1},
{0,1,0,1,0,1},
{0,1,1,0,1,1},
{1,1,0,1,0,0},
{0,1,0,1,1,0}
};

for (int i = 0; i < n; i++) {
if (color[i] == 0) {
dfs(i, 1);
}
}

cout << "Graph dvydolniy." << endl;
}

👇
Открыть все ответы
Ответ:
ароаурв
ароаурв
04.11.2020
{неэффективный алгоритм}

const
 k = 100;

type
 maze = array [1..k, 1..k] of integer;
 var
 l : maze;
 n, m: integer;
 i, j: integer;
 c: char;
 t: text;
 w: integer;
 x0, y0: integer;
 x1, y1: integer;

procedure ways(a,b,r:integer);
begin
 if (w = 0) or (r < w) then {нет смысла идти дальше, если текущий путь уже превосходит найденный}
 if (l[a,b] <> -2) then
 if (r < l[a,b]) or (l[a,b] = -1) then {нет смысла идти, если текущая клетка уже была достигнута за меньшее число шагов}
   begin
   l[a,b] := r;
   if (a = x1) and (b = y1) then
     w := r
   else
     begin
     if a <> 1 then ways(a - 1, b, r + 1);
     if b <> 1 then ways(a, b - 1, r + 1);
     if a <> n then ways(a + 1, b, r + 1);
     if b <> m then ways(a, b + 1, r + 1);
     end
   end;
end; 
begin
 assign(t, 'input.txt');
 reset(t);
 w := 0;
 readln(t, n, m);
 readln(t, x0, y0);
 readln(t, x1, y1);
 for i := 1 to n do
   begin
   for j := 1 to m do
     begin
     read(t, c);
     case c of
       '.' : l[i,j] := -1; {будем считать, что если клетка отмечена как -1, то путь к ней еще не найден}
       'X' : l[i,j] := -2; {-2, если клетка непроходима}
       end;
     end;
   readln(t)
   end;
 close(t);
 if (l[x0,y0] <> -2) and (l[x1,y1] <> -2) then
   begin
   l[x0,y0] := 1; {просто трюк, чтобы пройти проверку на (r < l[x0,y0])}
     ways(x0, y0, 0);
   end
 else
  l[x1,y1] := -1;
 writeln(l[x1,y1])
end.
4,4(70 оценок)
Ответ:
vitokle
vitokle
04.11.2020
Задача №1

var a:array [1..20] of integer;     
i:integer;
begin 
randomize;   
for i:=1 to 20 do begin   
a[i]:=random(19-(-10)+1)+-10;     
write (a[i],' ');           
end;
end.

Задача №2

var a:array [1..20] of integer; 
i:integer; 
begin 
writeln('Введите числа в интервале [-20;29]'); 
for i:=1 to 10 do read(a[i]); 
for i:=1 to 10 do 
if (a[i]>-29) and (a[i]<20) then write(a[i],' '); 
end.

Задача №3

var a:array [1..20] of integer; 
i,sum:integer; 
begin 
randomize; 
sum:=0; 
for i:=1 to 20 do 
begin 
a[i]:=random(19-(-10)+1)+-10; 
write (a[i],' '); 
if a[i]>0 then sum:=sum+1; 
end; 
writeln('Количество положительных элементов массива = ', sum); 
end.

Задача №4

var a:array [1..20] of integer; 
i:integer; 
begin 
randomize; 
for i:=1 to 20 do 
begin 
a[i]:=random(19-(-10)+1)+-10; 
if a[i]<0 then a[i]:=0; 
write (a[i],' '); 
end; 
end.

Задача №5

var a:array [1..20] of integer; 
i,sum:integer; 
begin 
randomize; 
sum:=0; 
for i:=1 to 20 do 
begin 
a[i]:=random(19-(-10)+1)+-10; 
write (a[i],' '); 
if a[i]>0 then sum:=sum+a[i]; 
end; 
writeln('Сумма положительных элементов массива = ', sum); 
end.
4,8(5 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ