Stránka 1 z 2
c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 14:41
od agil
Zdravím, byl by někdo schopný napsat algoritmus řádkového vyplňování pro 2d pole, stím že pokud bude pole prázdné, odhaluje to všechny políčka v řádku dokud to nenarazí na políčko s hodnotou.
Napsal jsem akorát aby mi to projelo čtyři směry od místa kliknutí, ale dál nevím.
http://postimg.org/image/hsbv9i435/
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 14:49
od Keporkak
Mno a nešlo by to udělat tak, že by projel ten tvůj algoritmus na každé políčko na které se posune? ty totiž klikneš a vyvoláš svůj cyklus...zkus cyklus aplikovat na každé políčko, které nemá žádnou hodnotu...myslím, na každé které se nachází na úrovních toho tvojeho kliku..jestli mi rozumíš

Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 14:51
od agil
hmm..hmm..to zni zajimave, akorat to nejak napsat

takhle to mam projizdeni nahoru, ta if podminka zarucuje ze ti to odhali to pole s cislem an ktery to narazi
Kód: Vybrat vše
while ((yNahoru >= 0) && (Array.pole[mouseX, mouseY] == 0) && (Array.poleM[mouseX, yNahoru] == 0) && (Array.pole[mouseX, yNahoru] == 0) && (Array.poleM[mouseX, mouseY] == 0))
{
Array.pole[mouseX, yNahoru] = 4;
yNahoru--;
completed = true;
}
if (completed = true)
{
if ((yNahoru >= 0) && (Array.poleM[mouseX, yNahoru] != 0) && (Array.poleM[mouseX, mouseY] == 0))
{
Array.pole[mouseX, yNahoru] = 4;
completed = false;
}
}
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 14:55
od Keporkak
Bohužel s tím ti už neporadím

v Céčku jsem nikdy nepsal

jsem rád, že jsem to vysvětlil na tolik, že to chápeš

většinou mi nikdo nerozumí

WOW to cos mi poslal je pro mě španělská vesnice...já psal Pascal

v něm bych udělal podprogram na hledání koncového políčka, tedy toho s číslem a použil bych ho pokaždé když bych narazil na políčko bez hodnoty, akorát nevím jak přesně....
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 16:00
od CZechBoY
no ty potřebuješ pro kažždé políčko pustit tu funkci ne? tak to je vhodný použít rekurzi
jinak nahoru jedeš přes while(--top) ....
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 20:34
od agil
Já jsem docela amatér a o rekurzi nemám ani páru

Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 20:49
od CZechBoY
co ti funguje?
jakej máš kod?
napiš algoritmus co to má dělat
rekurze je volání sebe sama
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 21:34
od agil
takže, zatím mám uděláno, že když klikneš, tak to od toho místa odhalí 4 směry(nahoru,dolu,doleva,doprava) + to odhali políčko na které to narazí(číslo)
Kód: Vybrat vše
private void Floodfill()
{
int yNahoru = mouseY - 1;
int yDolu = mouseY + 1;
int xDoleva = mouseX - 1;
int xDoprava = mouseX + 1;
int xVlevo = mouseX- 1;
bool completed;
while ((yNahoru >= 0) && (Array.pole[mouseX, mouseY] == 0) && (Array.poleM[mouseX, yNahoru] == 0) && (Array.pole[mouseX, yNahoru] == 0) && (Array.poleM[mouseX, mouseY] == 0))
{
//Array.pole = 0 .... znamena ze je policko neodhalene
//Array.poleM=0...znamena ze je policko prazdne(bez cisla)
//v pripade ze je policko Array.pole[mouseX, yNahoru] == 0 tak ho to odhali a yNahoru -- ... takze to projizdi dokud nenarazi na cislo
Array.pole[mouseX, yNahoru] = 4;
yNahoru--;
completed = true;
}
if (completed = true)
{
if ((yNahoru >= 0) && (Array.poleM[mouseX, yNahoru] != 0) && (Array.poleM[mouseX, mouseY] == 0))
{
//pokud narazi na cislo Array.poleM[mouseX, yNahoru] != 0, tak odhali
Array.pole[mouseX, yNahoru] = 4;
completed = false;
}
}
--- Doplnění předchozího příspěvku (12 Črc 2013 21:36) ---
dyztak tady je exe soubor
http://www.filedropper.com/hledanimin
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 12 črc 2013 22:05
od faraon
Takže chceš odkrýt celou oblast „nul“ až ke hranici nějakých čísel? Tak to bude určité vhodné použít rekurzi:
Kód: Vybrat vše
odkryj(x,y)
{
když jsi na ploše
{
když pole není odkryté
{
zobrazit
odkryj(x+1,y)
odkryj(x-1,y)
odkryj(x,y+1)
odkryj(x,y-1)
}
}
}
Tahle funkce nejdřív otestuje jestli už při odkrývání nevyjela za okraj hrací plochy, a potom jestli pole už není odkryté.
Pokud testy vyjdou, tak ho odkryje – zobrazí jeho obsah, a potom zavolá sama sebe na všechna čtyři sousední pole.
Tomuhle se říká rekurze a dají se s tím dělat neuvěřitelná kouzla. Ale musíš vždy myslet na to že rekurze požírá zdroje, protože při každém vnoření zabere kus paměti a spotřebuje na to nějaký čas procesoru, a také je strašně snadné v ní vytvořit nekonečný cyklus, takže se nikdy nesmí spustit bez nějaké podmínky!
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 13 črc 2013 23:22
od agil
Když tak na to cos mi poslal koukam, tak si říkám, to odhalí všechny políčka co se rovnaj nule, já potřebují jen určitou oblast, podle toho kam kliknes.jako je to v hledání min... Pokud klikne s na políčko které je nula, tak ti to odhalí okolní políčka která jsou nula, dokud to nenarazí na číslo a to také odhalí.
Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 14 črc 2013 01:23
od CZechBoY
bys musel napsat algoritmus

Re: c# Algoritmus řádkového vyplňování v 2d poli
Napsal: 14 črc 2013 11:28
od faraon
agil píše:Pokud klikne s na políčko které je nula, tak ti to odhalí okolní políčka která jsou nula, dokud to nenarazí na číslo a to také odhalí.
Ano, přesně to také dělá. Takhle:
Kód: Vybrat vše
X X X X X X X X X X
X X X X 3 2 X 1 X X
X 1 2 2 1 2 X
2 1
X 1 1 K 1
X 2 1 X 1 3
X 1 3 X X 2 2 X
X X 1 1 X X X X X X
X X X X X X X X X X
X X X X X X X X X X
Jenže v originálním hledání min se ti neprohledávají sousední čtyři políčka ale všech osm, tak zapřemýšlej jak moc se tvoje zadání a jeho fungování bude lišit. Případně bys mohl ten můj algoritmus malinko doplnit, tak aby pracoval trochu "zodpovědněji"
