Şimdi Ara

YOL BULMA ALGORİTMASI (YARDIM LAZIM)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
13
Cevap
0
Favori
2.363
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar resimde gördüğünüz harita üzerinde uğraşıyorum. X noktası bulunduğumuz yer ve hedef Y noktası.

    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.


     YOL BULMA ALGORİTMASI (YARDIM LAZIM)







  • resim nerede?
  • Atmıştım resmi gözüküyor bende ama tekrar atayım.


     YOL BULMA ALGORİTMASI (YARDIM LAZIM)
  • 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.



    < Bu mesaj bu kişi tarafından değiştirildi Mephalay -- 20 Ağustos 2014; 12:25:50 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Çizilen yolda dönemeç var, sonsuza girmemesi için durumu stack ile nasıl çözebilirsin ki?
  • keftar kullanıcısına yanıt
    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.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • 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

     
    The simplest (to implement) algorithm would be to just keep a stack of locations you've been at, and the route you took from each, unless backtracking gives you that information.

    To go back, just pop off old locations from the stack and check for more exits from that location until you find an old location with an untested exit.

    By consistently testing the exits in the same order each time, if you know that backtracking to a location comes from down (ie. last time you were at the old location you went down), then you simply pick the next direction after down.

    I am not entirely sure what you mean by going back too far though, I would assume you would want to go back to the previous place you have untested routes, is that not what you want?

    Note that unless you try to keep track of the path from the starting point to your current location, and avoiding those squares when you try to find new routes, you might end up going in circle, which would eventually make the stack too large.

    A simple recursive method which marks the path it takes and never enters areas that are marked can easily do this.

    Also, if your thing that moves through the maze is slightly smarter than just being able to move, and hit (stop at) walls, in that it can see from its current point in all directions, I have other algorithms that might help.




  • 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:
  • İ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.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.