Я пытаюсь создать алгоритм на C ++ для решения следующей головоломки:
У вас есть 4 куба. Куб имеет 6 граней. Каждое лицо четырех кубиков окрашено в красный, зеленый, синий или желтый цвет. Вы должны расположить кубы в столбце, где каждая сторона столбца имеет четыре разных цвета.
Я знаю решение головоломки в теории графов, которая заключается в использовании трехмерных кубов для создания2D сеть, из которой можно создать график, соответствующий каждому из 4 кубов. Затем объедините все четыре графика, чтобы создать один основной граф, из которого вы должны найти две 2-правильные псевдографы с непересекающимися ребрами.
Несмотря на то, что я знаю это решение теории графов, я не знаю, как перевести его в код C ++,Я начал с того, что спрашивал пользователя о цветах каждой из 6 граней каждого из 4 кубов, используя cout и cin. Затем я назначил эти пользовательские входные значения четырем массивам (по одному для каждого куба).
#include <iostream>
using namespace std;
int main() {
cout << "There are four cubes." << " Enter the following values: " << endl << endl;
string c_one_top, c_one_bottom, c_one_back, c_one_front, c_one_left, c_one_right;
cout << "Cube 1, Top: ";
cin >> c_one_top;
cout << "Cube 1, Bottom: ";
cin >> c_one_bottom;
cout << "Cube 1, Back: ";
cin >> c_one_back;
cout << "Cube 1, Front: ";
cin >> c_one_front;
cout << "Cube 1, Left: ";
cin >> c_one_left;
cout << "Cube 1, Right: ";
cin >> c_one_right;
string c_one[7] = {c_one_top, c_one_bottom, c_one_back, c_one_front, c_one_left, c_one_right};
cout << endl;
string c_two_top, c_two_bottom, c_two_back, c_two_front, c_two_left, c_two_right;
cout << "Cube 2, Top: ";
cin >> c_two_top;
cout << "Cube 2, Bottom: ";
cin >> c_two_bottom;
cout << "Cube 2, Back: ";
cin >> c_two_back;
cout << "Cube 2, Front: ";
cin >> c_two_front;
cout << "Cube 2, Left: ";
cin >> c_two_left;
cout << "Cube 2, Right: ";
cin >> c_two_right;
string c_two[7] = {c_two_top, c_two_bottom, c_two_back, c_two_front, c_two_left, c_two_right};
cout << endl;
string c_three_top, c_three_bottom, c_three_back, c_three_front, c_three_left, c_three_right;
cout << "Cube 3, Top: ";
cin >> c_three_top;
cout << "Cube 3, Bottom: ";
cin >> c_three_bottom;
cout << "Cube 3, Back: ";
cin >> c_three_back;
cout << "Cube 3, Front: ";
cin >> c_three_front;
cout << "Cube 3, Left: ";
cin >> c_three_left;
cout << "Cube 3, Right: ";
cin >> c_three_right;
string c_three[7] = {c_three_top, c_three_bottom, c_three_back, c_three_front, c_three_left, c_three_right};
cout << endl;
string c_four_top, c_four_bottom, c_four_back, c_four_front, c_four_left, c_four_right;
cout << "Cube 4, Top: ";
cin >> c_four_top;
cout << "Cube 4, Bottom: ";
cin >> c_four_bottom;
cout << "Cube 4, Back: ";
cin >> c_four_back;
cout << "Cube 4, Front: ";
cin >> c_four_front;
cout << "Cube 4, Left: ";
cin >> c_four_left;
cout << "Cube 4, Right: ";
cin >> c_four_right;
string c_four[7] = {c_four_top, c_four_bottom, c_four_back, c_four_front, c_four_left, c_four_right};
cout << "Here's what you put: " << endl << endl;
for (int i = 0; i <= 7; i++){
cout<< c_one[i];
cout<< c_two[i];
cout<< c_three[i];
cout<< c_four[i];
}
return 0;
}
Однако я застрял в этой точке. Возможно, создать матрицу смежности, которая представляет каждый из четырех графиков? А затем сложите четыре матрицы для создания мастер-графа? Но как мне сформулировать это в C ++?