21

Re: Графи

Поки що - маленька порада.

            if (room == 0) {
                cas[i][j] = '0';
                cas[j][i] = '0';
            }
            else {
                if (room == 1) {
                    cas[i][j] = '1';
                    cas[j][i] = '1';
                }
                else {
                    if (room == 2) {
                        cas[i][j] = '2';
                        cas[j][i] = '2';
                    }
                    else {
                        if (room == 3) {
                            cas[i][j] = '3';
                            cas[j][i] = '3';
                        }
                        else {
                            if (room == 4) {
                                cas[i][j] = '4';
                                cas[j][i] = '4';
                            }
                            else {
                                if (room == 5) {
                                    cas[i][j] = '5';
                                    cas[j][i] = '5';
                                }
                            }

Для початку: це дещо неочевидно, але якщо сприймати else if як єдину конструкуцію, такі вирази стають значно виразнішими.

            if (room == 0) {
                cas[i][j] = '0';
                cas[j][i] = '0';
            }
            else if (room == 1) {
                cas[i][j] = '1';
                cas[j][i] = '1';
            }
            else if ...

Але це - у тих випадках, де це потрібно. Тут же це не потрібно. Скористаємося з того факту, що коди цифр 0..9 в ASCII послідовні (можна було б і без цього, але тоді код був би трохи складнішим):

          int room = rand() % 6;
          char room_as_char = '0'+room; //room_as_char - це наш номер як символ
          cas[i][j] = cas[j][i] = room_as_char;

От і все. Без усіх if-else.
За бажання можна взагалі скоротити до

          cas[i][j] = cas[j][i] = '0' + rand() % 6;

замість 20 рядків у 6 рівнів вкладеності.

22

Re: Графи

І все ж таки - там в умові "кожний" чи "будь-який"?

Re: Графи

koala написав:

І все ж таки - там в умові "кожний" чи "будь-який"?

Так я не знаю. В мене здача десь наприкінці грудня. Але мені здається, що всі шляхи можна порахувати
Формулою комбінації. Там (С з 10 допустим по 7)*( сз 10 по 5) ну і так на к-сть дверей і їм доступні варіанти виходу в інші.
Ну а якщо там один тоді можна вважати що завдання виконано, так як я в черзі помістив шлях принца і вивів його на екран. Він завжди зачиняється. Тому не важливо який він шлях обере. Ну але я не впевнений...
Дякую що допомогли. Ще попробую реалізувати цю задачку через списки, можливо вийде щось інше.

24

Re: Графи

Полічити якоюсь формулою може й вийде, а от перерахувати - навряд. Там у будь-якому разі на n кімнат буде O(n2) дверей і O(n2!) маршрутів. Тобто для n=5 кількість маршрутів буде порядку 25!=15511210043330985984000000, а це трохи більше, ніж устигли б виконати операцій всі комп'ютери на Землі за 100 років.