У меня есть пазлы, которые выглядят так:
=== ====
=== ===
=== ====
Левый край имеет длину от 0 до 10 000, а справа также средняя часть от 1 до 10 000. Поэтому вопрос в том, могу ли я построить Прямоугольник? как первая головоломка имеет длину левого края, равную 0, а последняя головоломка имеет правый край длины 0, а посередине они идеально подходят?
Мне дано количество головоломок, которые у меня есть, и их параметры такие:
6
1 9 2
0 3 1
0 4 1
8 9 0
2 9 0
1 5 0
и результат может быть любым из этого:
2
0 3 1
1 5 0
или
3
0 3 1
1 9 2
2 9 0
или
2
0 4 1
1 5 0
Но если есть без результата мне нужно printf("no result")
Я должен сделать это в C, я подумал о создании некоторого дерева и поиске его с помощью BFS, где вершины будут иметь длину ребер, а ребро будет иметь среднюю длину и когда достигнуто 0 я бы набрал go весь путь и собирал числа, но это трудно кодировать. Поэтому я решил сделать рекурсию, но я также застрял:
#include<stdio.h>
int main(){
int a;
scanf("%d", &a);//here i get how many puzzles i have
int tab[a][3];//array for puzzles
int result[][3];//result array
int k = 0;//this will help me track how many puzzles has my result array
for(int i = 0; i < a; i++){//upload puzzles to array
for(int j = 0; j < 3; j++){
scanf("%d", &tab[i][j]);
}
}
findx(0, a, tab, result, k);//start of recursion, because start has to be length 0
}
int findx(int x, int a, int *tab[], int *result[], int k){//i am looking for puzzle with length x on start
for(int i = 0; i < a; i++){
if(tab[a][0] == x){//there i look for puzzles with x length at start
if(tab[a][2] == 0){//if i find such puzzle i check if this is puzzle with edge length zero at the end
for(int m = 0; m < 3; m++){//this for loop add to my result array last puzzle
result[k][m] = tab[a][m];
}
return print_result(result, k);//we will return result go to print_result function
}
else{//if i have puzzle with x length on the left and this is not puzzle which ends rectangle i add this puzzle
//to my result array and again look for puzzle with x equal to end length of puzzle i found there
for(int m = 0; m < 3; m++){
result[k][m] = tab[a][m];
k += 1;
}
findx(tab[a][2], a, tab, result, k);
}
}
}
printf("no result");
}
int print_result(int *result[], int k){
printf("%d", &k);//how many puzzles i have
printf("\n");
for(int i = 0; i < k; i++){//printing puzzles...
for(int j = 0; j < 3; j++){
printf("%d ", &result[i][j]);
}
printf("\n");//...in separate lines
}
}
У меня есть ошибка, что массив результатов не может выглядеть так int result[][3]
из-за []
, но я не знаю, сколько головоломки, которые я собираюсь использовать так? ... и у меня есть неявное объявление для обеих моих функций. Ребята, помогите, я не очень разбираюсь в C, и решить эту проблему очень сложно.