1. sayfa
Atmıştım resmi gözüküyor bende ama tekrar atayım. < Resime gitmek için tıklayın > |
Bunun ağaç yapısını kullanmalısın. dizi[i,j] noktasından [i+1,j] [i-1,j] [i,j+1] [i,j-1] şeklinde başlangıç noktasından 4 yöne bakacaksın. eğer değer sınırlar içerisinde ve 0 değeri ise bunu ağaca bir düğüm(node) olarak ekle. Böyle ekley eklye ağaç derinleşecek baktın ki bir yerde 4 tarafa da gidecek yer yok (tabi geldiğin yöne bakmayacaksın) burada backtracking yapıp bir üst node'a çıkıp oradan devam edeceksin. Böylece ağaç dallanacak. Y'ye ulaştığın noktada aramayı bitirip yola ulaşabilirsin. Eğer tek bir yol yoksa arama işlemini kesmez devam edersin. Ağacın sonsuz döngüye girmesini engellemek için node'un parent değerleri ile kontrol etmelisin ve bu değeri es geçmelisin. |
Aynisini 2. Sinifta yapmistik data structures dersinde. Algoritma soyle, bulundugun noktada birden fazla yone gidebiliyorsan birini random sec. hepsini sectigin en ustte olacak sekilde stack e at. Cikmaz sokaga gelince stack.pop(). Cunku bu yol, yol degil. Recursive olarak bu algoritma ile finish e ulasiyorsun. Finish e gelince stack.print(). Her labirentin bir cozumu oldugu varsayimi yoksa, null check leri arttirmak gerekiyor. Tree ile de cozulur ama stack daha performansli ve pratik. |
Çizilen yolda dönemeç var, sonsuza girmemesi için durumu stack ile nasıl çözebilirsin ki? |
Yol ayrimlarinda gidebilecegi yerler stack e push edilir. Gidilen yol cikmaz sokaga gelince de, stackten pop edilip bir onceki yol ayrimindaki diger yol secilir. Yani sonsuz dongu olmasi icin pop etmemek gerekiyor. Tree yapisi ile de yanlis tasarimla sonsuz tree generate edebilir. Tree nin dezavantaji traverse ederken ki maliyet, stack.pop cok hizli ona gore. Ama dedigim gibi, tree ile de cozulur. |
Abi yolun kendisi dönemeç zaten çıkmaz yol olmuyor ki sürekli karşına 0 çıkacak ve dönecek çıkmaz yol değil bu, sonsuz döngü stack ile bunu nasıl çözeceksin? |
Bizimde bir labirent ödevimiz vardı. Stack yapısıyla çözmüştük. Mantığını anlarsan en uygun yapının stack olacağını anlarsın. Belki faydası olur bir incele verdiğim siteleri http://www.cs.bu.edu/teaching/alg/maze/ http://www.codeproject.com/Articles/230295/Solve-Maze-Problem-tortuous-game
|
abi labirentte çözüm tek olur döngülü bir yol olmaz o yüzden stack kullanılır. Örnekteki yola baktın mı 4 tane 0 var kare gibi döngü var orada senin dediğin tek bir yolu olan döngü fln olmayan labirentte olur yapmayın |
Her ne kadar millet BFS/DFS tarzi seyler onersede ben Dinamik programlamayla bunun daha kolay yapilacagina inaniyorum. Neden dersen bu sorunun benzeri ACM ICPC de cikti. Hatta aynisi fakat en buyuk sorun duvarlar yerine yolun agirligi vardi. BFS/DFS/Dijkstra cok yavas calisiyordu o yuzden Floyd Warshall tarzi birsey yazmistim. Bunun disinda bir arkadasin bahsettigi gibi A* var su sekilde: < Resime gitmek için tıklayın > |
İlginiz ve yardımlarınız için çok teşekkürler arkadaşlar cevaplar üzerine çalışacağım. |
Resimde gösterdiğin şekilde verilen labirentte yol bulmak için en basit yoldan stack yapısını kullanabilirsin. Bunların yanında biraz daha gelişmiş bir şey yapmak istiyorsan en kısa yol bulma algoritmalarından olan " Bellman Ford " ya da " Dijkstra " algoritmalarını kendine göre düzenleyerek bi algoritma oluşturabilirsin. Tabi bu algoritmaları kullanmak istiyorsan Graph yapısı hakkında bilgiye de sahip olman lazım. |
1. sayfa
1'ler duvar görevinde yani geçilmez alan. 0'lar ise yollar.
Biz X'den Y'ye giden yolu bulacağız. Ve izlediğimiz rotayı yazdıracağız.
Programın çoğu noktası hazır ancak sadece ihtiyacımız olan yolları kullanmamız lazım burada problem yaşıyorum. Algoritmada yardımcı olabilecek ya da örnek bir kod gösterebilecek birileri çıkarsa çok memnun olurum.
Teşekkürler.
< Resime gitmek için tıklayın >