Ағашқа байланысты есеп

Есептер
агаш


1 — 0

2 — 1
7 — 1
8 — 1

3 — 2
6 — 2

9 — 8
12 — 8

4 — 3
5 — 3

10 — 9
11 — 9

Агаштын мандерин осылай 2 олшемди массив туринде беруге болады.
1-баган — ол нукте
2-баган — нутенин атасы :)

1 — 0 деген соз, нуктенин атасы жок дегенди билдиреди, ягни ол тубир (корень)

Есептин шарты бир нуктеден келеси нуктеге баратын жолдар санын табу
мысал: 3-нуктеден 7 -ге бару керек, ол ушин 3->2->1->7, 3 кадам орындалады, ягни 3 жол :))

12 пікір

avatar
Бул есеп оптимизацияга арналмаган, просто логикага, маныздысы дурыс шыкса болды :)
avatar
Қиын есеп… Әлі миым жетпей отыр...))
avatar
Подсказка, рекурсивный метод колданып шыгаруга болады.
Рекурсивный метод(функция) — ози озин шакыратын метод :)
avatar
Ешкімде идея жоқ па?) Күнде қараймын әлі ешкім жазбапты… admin Ереке өзіңіз бірдеңе десеңізші)))
avatar
Қол тимей жатыр)) Былай шығаруға болатын есеп
avatar
Не деген уят :(
avatar
Assalamualeikum ua rahmatullah,kyzyk esep eken, bugin tirkelip em Erekennin blogyna,
eseptin tez kolga jazylgan versiasy(baldakpen))))
massiv 2 olshemdi emes, bir olwemdi(indexteri koldandy birinshi bagan retinde)

public class DauletsTree {
int arrRecIndex;
void function(int a, int[] arr, int[] arrRec){
if(a==1){
return;
}else {
arrRecIndex++;
arrRec[arrRecIndex]=arr[a];
function(arr[a], arr, arrRec);
}
return;
}
void fillPathUntilRoot(int child, int[] arr, int[] arrRec){
arrRecIndex=0;
arrRec[0]=child;
function(child, arr, arrRec);
}
public static void main(String[] args) {
// TODO code application logic here
int[]arr = new int[13];
arr[0]=-1;
arr[1]=0;
arr[2]=1;
arr[3]=2;
arr[4]=3;
arr[5]=3;
arr[6]=2;
arr[7]=1;
arr[8]=1;
arr[9]=8;
arr[10]=9;
arr[11]=9;
arr[12]=8;
int[]arrRec1 = new int[13];
int[]arrRec2 = new int[13];
DauletsTree dt = new DauletsTree();
dt.fillPathUntilRoot(3, arr, arrRec1);
dt.fillPathUntilRoot(7, arr, arrRec2);
int firstindex=0;
int secondIndex=0;
outer:
for (int i = 0; i < arrRec1.length; i++) {
for (int j = 0; j < arrRec2.length; j++) {
if(arrRec2[j]==0){
continue outer;
}
if(arrRec1[i]==0){
break outer;
}
if(arrRec1[i]==arrRec2[j]){
firstindex=i;
secondIndex=j;
break outer;
}
}
}
System.out.println(firstindex+secondIndex);
}
}
avatar
Уаалейкумуссалям уа рохматуллах! Блогқа қош келдің, Досбол! Бұл Ерекеңдікі ғана емес, SmartDev ерікті программисттер клубының блогы:)
avatar
Уаалейкумуссалям уа рохматуллах! Кощ келдин, брат :). Машалла, мына есептин турганына 1 апта болды. Шыгып шыгып тур гой да жауабы да?
avatar
ia, wygyp tur, 2 nukteden root-ka dein jol toltyrylady 2 massivke, sol 2 massivten kyska jol uzyndygy tabylady, kate bolsa aitynyz)))))
avatar
Ия брат, дурыс, бирак оте неоптимально :).Егер 4 пен 5 енгизсем, кореньге дейин циклди орындау кажет емес болатын. 10 этажды зданиенин ишинен 1 адамды изде десе, сиз бир квартиага кирип барлык болмесин коре саласыз гой, кейин ол квартирадан шыгап сол этаждагы квартираларга кирип барлык комнатасын карайсыз. Или сиз 1 — этаждагы, 1 квартиранын 1 болмесин гана карайсыз ба? :))
avatar
10 etajga baldakpen wygady goi)))), myndai birdene wykty, durys sekildi
public class DauletTree {
boolean done;
void function(int a, int b, Integer count, int[] arr, int from){
if(done||a==0){
return;
}
if(a==b){
System.out.println(count);
done=true;
return;
}
count++;
for (int i = 0; i < arr.length; i++) {
if(arr[i]==a){
function(i, b, count, arr, a);
}
}
if(a!=0){
int temp=arr[a];
arr[a]=0;
if(temp==from){
count--;
count--;
return;
}
function(temp, b, count, arr,a);
}
return;
}
void find(int from, int to, int[] arr){
Integer count = new Integer(0);
function(from, to, count, arr,from);
}
public static void main(String[] args) {
// TODO code application logic here
int[]arr = new int[13];
arr[0]=-1;
arr[1]=0;
arr[2]=1;
arr[3]=2;
arr[4]=3;
arr[5]=3;
arr[6]=2;
arr[7]=1;
arr[8]=1;
arr[9]=8;
arr[10]=9;
arr[11]=9;
arr[12]=8;
DauletTree dt= new DauletTree();
dt.find(3, 7, arr);
}
}
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.