c# Algoritmus řádkového vyplňování v 2d poli Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

agil
Level 2
Level 2
Příspěvky: 181
Registrován: říjen 10
Pohlaví: Muž
Stav:
Offline

c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod agil » 12 črc 2013 14:41

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/
immortal-world.net - přijďte si zahrát!

Reklama
Uživatelský avatar
Keporkak
Level 2
Level 2
Příspěvky: 222
Registrován: květen 13
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod Keporkak » 12 črc 2013 14:49

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íš :D
Lenovo IdeaPad Y580 s i5 3210M a odpálenou GTX 660M|

AMD Phenom II x4 955 @3,8 GHz
12 GB RAM Kingston 1600 MHz
Gigabyte GA-880GA-UD3H
Radeon HD 5750 a čekám na ASUS HD 7950
Seagate Barracuda 7200.1, SSD Crucial MX200 250 GB

agil
Level 2
Level 2
Příspěvky: 181
Registrován: říjen 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod agil » 12 črc 2013 14:51

hmm..hmm..to zni zajimave, akorat to nejak napsat :D

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;



                }
            }
immortal-world.net - přijďte si zahrát!

Uživatelský avatar
Keporkak
Level 2
Level 2
Příspěvky: 222
Registrován: květen 13
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod Keporkak » 12 črc 2013 14:55

Bohužel s tím ti už neporadím :D v Céčku jsem nikdy nepsal :-( jsem rád, že jsem to vysvětlil na tolik, že to chápeš :D většinou mi nikdo nerozumí :D

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ě....
Lenovo IdeaPad Y580 s i5 3210M a odpálenou GTX 660M|

AMD Phenom II x4 955 @3,8 GHz
12 GB RAM Kingston 1600 MHz
Gigabyte GA-880GA-UD3H
Radeon HD 5750 a čekám na ASUS HD 7950
Seagate Barracuda 7200.1, SSD Crucial MX200 250 GB

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod CZechBoY » 12 črc 2013 16:00

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) ....
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

agil
Level 2
Level 2
Příspěvky: 181
Registrován: říjen 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod agil » 12 črc 2013 20:34

Já jsem docela amatér a o rekurzi nemám ani páru :-)
immortal-world.net - přijďte si zahrát!

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod CZechBoY » 12 črc 2013 20:49

co ti funguje?
jakej máš kod?
napiš algoritmus co to má dělat

rekurze je volání sebe sama
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

agil
Level 2
Level 2
Příspěvky: 181
Registrován: říjen 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod agil » 12 črc 2013 21:34

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
immortal-world.net - přijďte si zahrát!

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod faraon » 12 črc 2013 22:05

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!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

agil
Level 2
Level 2
Příspěvky: 181
Registrován: říjen 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod agil » 13 črc 2013 23:22

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í.
immortal-world.net - přijďte si zahrát!

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod CZechBoY » 14 črc 2013 01:23

bys musel napsat algoritmus :D
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: c# Algoritmus řádkového vyplňování v 2d poli

Příspěvekod faraon » 14 črc 2013 11:28

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" ;-)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host