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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Shato
2 / 2 / 0
Регистрация: 16.03.2011
Сообщений: 82
#1

раскраска - C++

26.10.2011, 17:23. Просмотров 947. Ответов 4
Метки нет (Все метки)

Ребят, сделайте если не сложно, пожалуйста. Заранее спасибо вам
Задана перестановка n чисел a1, a2,..., an (1 ≤ ai ≤ n). По определению перестановки как отображения, под действием этой перестановки число j отображается в число aj. Раскрасьте все числа от 1 до n в два цвета таким образом, чтобы для любого j его образ pj имел другой цвет (чем число j). Если так раскрасить числа невозможно, выведите -1.

Входные данные
В первой строке записано число n (1 ≤ n ≤ 105). Вторая строка содержит перестановку n целых чисел от 1 до n.

Выходные данные
Выведите последовательность n целых чисел c1, c2,..., cn, где ci — это цвет числа i. Это значение должно быть равно 1, если число покрашено в первый цвет, и 2 — если во второй.

Выведите единственное число -1, если раскрасить числа от 1 до n невозможно.

Пример
Ввод:
4
2 1 4 3
Вывод:
1 2 1 2

Если найдется свободная минутка, напишите код пожалуйста. буду очень признателен. Спасибо!!
--------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 17:23     раскраска
Посмотрите здесь:

Раскраска таблицы умножения - C++
Раскраска таблицы умножения (Время: 1 сек. Память: 16 Мб Сложность: 32%) Таблицей умножения назовем таблицу размера n строк на m...

Раскраска произвольной прямоугольной области - C++
Добрый день! На сетке задана произвольная область, состоящая из прямоугольников и "жучок", который, двигаясь по этой области, может...

Раскраска - ActionScript
Добрый день! Здесь описан замечательный урок: тема «Делаем детские разукрашки» Не могли бы вы мне пожалуйста написать, что нужно...

Раскраска stringgrid - Delphi
как можно раскрасить stringgrid, к примеру 1 строчку светло-зеленым, а другую зеленым?

Раскраска календаря - PHP
Ребят, я тут написал календарь с часами, в принципе он работает, но такую опцию, как окраска воскресенья в красный цвет и текущего в...

Раскраска графа - Дискретная математика
Образовавшийся коммерческий университет арендует здание для проведения занятий. В четверг проводится 7 лекций: право, английский язык,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 21:03     раскраска #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
#include<stdio.h>
int main()
{
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int n, mas[105], mas1[105]={0}, i;
  int fl=0;
  scanf("%d", &n);
  for(i=0; i<n; i++)
      scanf("%d", &mas[i]);
  while(fl==0)
  {   
      for(i=0; i<n; i++)
          if(mas1[i]==0)
              break;
      if(i==n)
          fl=2;
      else
      {
          mas1[i]=1;
          while(mas1[mas[i]-1]==0)
          {
              if(mas1[i]==1)
                  mas1[mas[i]-1]=2;
              else
                  mas1[mas[i]-1]=1;
          }
          if((mas1[i]==1 && mas1[mas[i]-1]==1) || (mas1[i]==2 && mas1[mas[i]-1]==2))
              fl=1;
      }
  }
  if(fl==2)
      for(i=0; i<n; i++)
          printf("%d ", mas1[i]);
  else
      printf("-1");
    return 0;
}
Shato
2 / 2 / 0
Регистрация: 16.03.2011
Сообщений: 82
26.10.2011, 21:47  [ТС]     раскраска #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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
#include<stdio.h>
int main()
{
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int n, mas[105], mas1[105]={0}, i;
  int fl=0;
  scanf("%d", &n);
  for(i=0; i<n; i++)
      scanf("%d", &mas[i]);
  while(fl==0)
  {   
      for(i=0; i<n; i++)
          if(mas1[i]==0)
              break;
      if(i==n)
          fl=2;
      else
      {
          mas1[i]=1;
          while(mas1[mas[i]-1]==0)
          {
              if(mas1[i]==1)
                  mas1[mas[i]-1]=2;
              else
                  mas1[mas[i]-1]=1;
          }
          if((mas1[i]==1 && mas1[mas[i]-1]==1) || (mas1[i]==2 && mas1[mas[i]-1]==2))
              fl=1;
      }
  }
  if(fl==2)
      for(i=0; i<n; i++)
          printf("%d ", mas1[i]);
  else
      printf("-1");
    return 0;
}
Если ввести:
8
8 7 4 3 1 2 5 6
То выводит -1, а должен 1 2 1 2 2 1 и еще какие то 2. вобщем ответ есть
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 21:54     раскраска #4
Цитата Сообщение от Shato Посмотреть сообщение
Если ввести:
8
8 7 4 3 1 2 5 6
То выводит -1, а должен 1 2 1 2 2 1 и еще какие то 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
#include<stdio.h>
#include<stdio.h>
int main()
{
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int n, mas[105], mas1[105]={0}, i;
  int fl=0;
  scanf("%d", &n);
  for(i=0; i<n; i++)
          scanf("%d", &mas[i]);
  while(fl==0)
  {       
          for(i=0; i<n; i++)
                  if(mas1[i]==0)
                          break;
          if(i==n)
                  fl=2;
          else
          {
                  mas1[i]=1;
                  while(mas1[mas[i]-1]==0)
                  {
                          if(mas1[i]==1)
                                  mas1[mas[i]-1]=2;
                          else
                                  mas1[mas[i]-1]=1;
                          i=mas[i]-1;
                  }
                  if((mas1[i]==1 && mas1[mas[i]-1]==1) || (mas1[i]==2 && mas1[mas[i]-1]==2))
                          fl=1;
          }
  }
  if(fl==2)
          for(i=0; i<n; i++)
                  printf("%d ", mas1[i]);
  else
          printf("-1");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 22:07     раскраска
Еще ссылки по теме:

DBGrid раскраска - Delphi
http://www.delphikingdom.ru/images/cg1.gif Как раскрасить строки в DBGrid через один. Хочу серый, белый, серый, белый....

раскраска DBCtrlGrid - C++ Builder БД
А как раскрашивать строки DBCtrlGrid Как обращаться к элементам положенным в DbctrlGrid

Раскраска ячеек - Delphi
У меня не работает раскраска последнего столбца Stringgrid'a. Точнее, вообще ничего не закрашивается) делаю через процедуру: ...

Раскраска кнопок - C++ WinAPI
Добрый вечер.Поставил пару кнопок в окно.Хочется их закрасить каким-либо цветом и текст вывести каким либо цветом. Попробовал- ...


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

Или воспользуйтесь поиском по форуму:
Shato
2 / 2 / 0
Регистрация: 16.03.2011
Сообщений: 82
26.10.2011, 22:07  [ТС]     раскраска #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
извиняюсь, одну строчку забыл добавить (переход на следующее число по цепочке). Вот так правильно:
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
#include<stdio.h>
#include<stdio.h>
int main()
{
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int n, mas[105], mas1[105]={0}, i;
  int fl=0;
  scanf("%d", &n);
  for(i=0; i<n; i++)
          scanf("%d", &mas[i]);
  while(fl==0)
  {       
          for(i=0; i<n; i++)
                  if(mas1[i]==0)
                          break;
          if(i==n)
                  fl=2;
          else
          {
                  mas1[i]=1;
                  while(mas1[mas[i]-1]==0)
                  {
                          if(mas1[i]==1)
                                  mas1[mas[i]-1]=2;
                          else
                                  mas1[mas[i]-1]=1;
                          i=mas[i]-1;
                  }
                  if((mas1[i]==1 && mas1[mas[i]-1]==1) || (mas1[i]==2 && mas1[mas[i]-1]==2))
                          fl=1;
          }
  }
  if(fl==2)
          for(i=0; i<n; i++)
                  printf("%d ", mas1[i]);
  else
          printf("-1");
    return 0;
}
спасибо!
Yandex
Объявления
26.10.2011, 22:07     раскраска
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru