A* Pathfinding Algorithm (Coding Challenge 51 - Part 1)

Поделиться
HTML-код
  • Опубликовано: 17 янв 2025

Комментарии • 612

  • @drlipnose
    @drlipnose 2 года назад +425

    I ended up here while trying to fix my own version of A* code for a personal project. Although in a completely different language, I figured following the logic from start to finish would help. I am happy to say that after watching this twice, clocking in at a near 2 hours of of the most energetic coding I've ever observed, I realized one of my i's were a j.

    • @TheCodingTrain
      @TheCodingTrain  2 года назад +55

      This is an amazing story!!

    • @rya7886
      @rya7886 2 года назад +5

      I feel your pain before notepad++ we had notepad... it was as fun as you described!

    • @greatcesari
      @greatcesari 2 года назад +8

      I got intense nausea reading that last part.

    • @nightwintertooth9502
      @nightwintertooth9502 11 месяцев назад

      This is the problem with monospace font glyphs and bad vision. 😂

    • @8BitZ0mbie
      @8BitZ0mbie 8 месяцев назад

      Classic

  • @kim15742
    @kim15742 8 лет назад +1043

    I like it how you show the result at the beginning. Otherwise, I always have to go to the end and see if that is something I want to learn.

    • @TheCodingTrain
      @TheCodingTrain  8 лет назад +162

      Yes, I hope to keep doing this with future challenges!

    • @ilyaexo2005
      @ilyaexo2005 8 лет назад +4

      Sometimes it is obvious from description what are you going to do. So, please don't show final result until it really hard to understand!

    • @Twurl
      @Twurl 6 лет назад +11

      I personally hate it when he shows the end result at the beginning. At least give a spoiler warning or a timestamp to skip it. For me, seeing the exact end result removes nearly all motivation to watch through an hour long two-part tutorial. I would rather watch the project organically come together as he builds it, without knowing exactly what to expect.

    • @tx6723
      @tx6723 5 лет назад +2

      I agree to an extent I like the excitement and motivation of not knowing

    • @luckylove72
      @luckylove72 4 года назад

      You are impatient.

  • @amazingstudiotechnology6513
    @amazingstudiotechnology6513 7 лет назад +4

    You are one of the best teacher online and with a great personality .You have help me a lot with processing. We need more people like you in the world ,thank you.

  • @akshay2012rdts
    @akshay2012rdts Год назад +8

    People like you do more for students than many universities around the world. Cheers to learning 🎉

  • @sennabullet
    @sennabullet 3 года назад +5

    I have been binge watching your videos over the holiday vacation...and I just don't know how I can express my gratitude for making these amazing videos. Your enthusiasm, presentation style...makes what would be a tough process (learning to program) a VERY enjoyable learning process. A massive thank you for sharing your incredible knowledge. You just got a new member.

    • @TheCodingTrain
      @TheCodingTrain  3 года назад +2

      Thank you Rico! Did you fill out the google form and link your account to Discord?

    • @sennabullet
      @sennabullet 2 года назад +1

      @@TheCodingTrain...notbyet! Will do!! Did buy some Coding Train Merch though!
      What I love the most about the videos you make...is that you don't edit out your mistakes. 'this dot' et all. They are mistakes all of us noobs will make and you show us that even pros make mistakes...and the debugging method is education in itself

    • @codingtraintwitcharchive3277
      @codingtraintwitcharchive3277 2 года назад

      @@sennabullet Thanks, I really appreciate this feedback!

  • @psyrinx
    @psyrinx 5 лет назад +26

    I love all your Coding Challenge videos. I'd love to see you make a multi-part series of you putting a lot of code and detail into a project.

  • @markell1172
    @markell1172 8 месяцев назад +1

    This channel always when i don’t know what to do when i want to code something gives me motivation and ideas, pretty cool.

  • @anshum1675
    @anshum1675 5 лет назад +12

    Best explanation of A* on the internet! By the way, you could have added neighbours to a spot just before looping through its neighbours. This way if you didn't need to check the neighbours of some spots, you wouldn't need to add neighbours to it. They could just be added to closed set without neighbours. This would save a lot of memory when you're dealing with many spots

  • @dumbcalamitychild
    @dumbcalamitychild 4 года назад +5

    I honestly don't know what I would do without you.

  • @scavallarin
    @scavallarin 3 года назад +16

    This guy is a genius! It looks so straight forward every single step. Amazing 🤩

  • @АлексейГусар-ф9й
    @АлексейГусар-ф9й 6 лет назад +30

    Man, thank to you again!! I'm so interesting in algorithms and ML, but didn't know where to start. And your lectures are such a good place to start and go far! It's really great, new level, so different to compare with usual front-end JS, it's real science, it's interesting, it's improve you. Thank you!

  • @Stickman-yw3nu
    @Stickman-yw3nu 8 лет назад +186

    It is fantastic how this guy has so muck inspiration and energy to program,and a lot of that anergy actually hi is giving to us , BIG THANKS YO HIM :D

    • @Nickoking12
      @Nickoking12 6 лет назад +8

      Tbh his overly childish display of energy is kind of annoying

    • @FeLiNe418
      @FeLiNe418 5 лет назад +9

      @@Nickoking12 you must be fun at parties

    • @BloodyClash
      @BloodyClash 5 лет назад +2

      Also like his energy and paired with it his intelligence you can hear and see

    • @kavinbharathi
      @kavinbharathi 4 года назад +1

      @@Nickoking12 there are always people that does not want someone be themselves, aren't there...

    • @skmgeek
      @skmgeek 2 года назад

      @@kavinbharathi yep

  • @douggale5962
    @douggale5962 3 года назад +4

    25:20 Array's splice method removes one or more elements from an array, closes the gap, and reduces the length. It makes an array of the removed elements, if any, and returns them. You can also insert zero or more new elements in that position by passing them as the subsequent parameters after removal range base and length.

  • @taradis5659
    @taradis5659 6 лет назад +81

    If I had more professors who teach like you I was a better engineer now !

    • @neotodsoltani5902
      @neotodsoltani5902 4 года назад +14

      Yeah, the problem is, many of the university teachers are bunch of morons.

    • @MrTrollo2
      @MrTrollo2 4 года назад +7

      if teachers would teach like this you'd need longer days. Of course it's easy to understand when you already know how it's done.

    • @justarandomlol
      @justarandomlol 3 года назад

      @@MrTrollo2 ikr

  • @canitbeapplied2500
    @canitbeapplied2500 5 лет назад +10

    Translating this into C# for unity is... interesting. Tough to find a good tutorial on pathfinding, luckily this seems to be working for me so far. Love the videos keep up the great work : )

    • @smolboye1878
      @smolboye1878 3 года назад

      I had to translate my js code for A* to C for my robotics team a couple of years ago. Great way to learn about pointers and dynamic memory.

  • @viggzta
    @viggzta 8 лет назад +1

    This was super helpful for actually learning A*. I have tried to do it multiple times in C# but never got it working, but ~3 days ago i figured it out thanks to this video. You rock!

  • @CodingWithUnity
    @CodingWithUnity 6 лет назад +22

    I know this is a pretty old video, but for anyone watching. The reason it wasnt giving his expected results with no walls and no diagonals is because you need to add tiebreaking in. You can do this simply by changing
    for (int i = 0; i < openSet.Count; i++)
    {
    if (openSet[i].F < openSet[winner].F)
    winner = i;
    }
    Too
    for (int i = 0; i < openSet.Count; i++)
    {
    if (openSet[i].F < openSet[winner].F)
    winner = i;
    else if (openSet[i].F == openSet[winner].F)//tie breaking
    if (openSet[i].H < openSet[winner].H)
    winner = i;
    }

  • @hassaanfarooq9803
    @hassaanfarooq9803 6 лет назад +3

    Best tutorial seen so far on A* algorithm

  • @SimonWinter-nz
    @SimonWinter-nz 3 года назад

    Thanks

  • @historian2
    @historian2 6 лет назад +2

    BInary heap implementation of Dijkstra Algorithm runs in O(E)+|V|log|V| time which isn't particularly slow. Together with Hoare's Quicksort Algorithm, Dijkstra Algorithm must rank in the top 2 algorithm of the last century!
    Excellent job on your videos, you are a great teacher!

  • @tanmayagarwal8513
    @tanmayagarwal8513 4 года назад +2

    Really Really Really!!!! Fantastic Video. I really love his energy while he was teaching!! Wish I could have this man as my professor. Amazing!!

  • @jesseefcf3268
    @jesseefcf3268 6 лет назад +4

    4:36 "The algorithm is typically written with a formula. The formula's actually quite simple, although any time you write a formula, it starts to be like, 'Oh my god, is this really what we're doing today?' "
    haha ily dan

  • @petergriffith9468
    @petergriffith9468 5 лет назад +1

    Thanks to your inspiration I finally managed to implement an object oriented version of Astar for Codewars. Keep up the good work!

  • @sulochandhungel
    @sulochandhungel 7 лет назад +1

    So after a mess and 2 hours you finished it? You are BRILLIANT my friend!

  • @jchenji
    @jchenji 8 лет назад +5

    Dan, you are one of the only CS instructors I've enjoyed listening to. Even when I'm not in a mood to program, watching your videos always makes me want to start something of my own. I've always struggled with finding motivation, and you have helped me find it again. Thanks a bunch! I'm glad I found your channel.

  • @benzokiller1
    @benzokiller1 6 лет назад +2

    Absolutely amazing video! Your energy for coding is absolutely amazing and got me coding in p5

  • @gordonmctague1723
    @gordonmctague1723 9 месяцев назад

    So cool to watch you programming, I've been learning C# for the past few months and it's cool to watch you working in Java but still understanding what you're doing. I'm going to have a go at doing this in C#.

  • @matiasvlevi6647
    @matiasvlevi6647 5 лет назад +9

    1:42 "needle in a haystack"
    *Non-premium spotify user's ptsd intensifies*

  • @YADA70073
    @YADA70073 4 года назад

    I'm really love the way you showing the coding... fun and relax.... with the great result.

  • @adamjc86
    @adamjc86 6 лет назад +1

    at 25:48 you create a function to find the index of the `current` element, but you already know that value, it is the value stored in `winner`, so I think you could just do `openSet.splice(winner, 1)`, or without side effects: `openSet = openSet.slice(0, winner).concat(openSet.slice(winner + 1, openSet.length))`

  • @scottk5083
    @scottk5083 5 лет назад +1

    found out about this channel afew days ago. your videos and walkthroughs are amazing.

  • @ipwnzyanoobz
    @ipwnzyanoobz 6 лет назад +3

    For any of you wondering, this is the kind of algorithm top down view rpgs and mobas use like league, runescape, fallout etc

  • @ChrisFotosMusic
    @ChrisFotosMusic 4 года назад +15

    31:39 "some other life that you have"
    buddy i barely have one life as it is

  • @TeamUnpro
    @TeamUnpro 2 года назад

    dude, I f*ing LOVE your website!

  • @camelcase9225
    @camelcase9225 8 лет назад +1

    I watched this live stream. Must have been the hardest one to edit yet. Probably why part 1 wasn't released until 2 days after haha. Love your channel man, I swear I've put in at least 60 hours watching many of your vids. Btw, I started Frogger today in P5, I think you should consider it for a coding challenge. It's a long and tedious one though!

  • @dtymnn
    @dtymnn Год назад

    I'm in web dev and watching this. Idk why but this is refreshing some good memories lol

  • @claudiameneghesso1843
    @claudiameneghesso1843 4 года назад +1

    Very well explained, thanks! Love your enthusiasm for teaching!

  • @shubhamagarwal797
    @shubhamagarwal797 6 лет назад +1

    You saved my semester! Brilliant work. You sir, are awesome!

  • @madsgundersen4507
    @madsgundersen4507 8 лет назад +49

    Your beard is majestic

  • @BukovTervicz
    @BukovTervicz 3 года назад

    Holy crap what a good A* explanation at the beginning

  • @freeidaho-videos
    @freeidaho-videos 9 месяцев назад +1

    Looks just like a robot finding an optimal path through a building. ;)

  • @taihatranduc8613
    @taihatranduc8613 4 года назад

    Thank you a lot. Why are you always the best person to explain things

  • @Tordek
    @Tordek 8 лет назад +9

    I built an A* PF viz in Processing the other day, and I was *this* close to tearing my hair out until I realized how I could simplify away almost half of the code I had written to fix edge cases by just... making a smarter Neighbors() function.

  • @jacobmpp
    @jacobmpp 8 лет назад +47

    you should make 2048

  • @dubvascl5840
    @dubvascl5840 4 года назад +1

    3:24 - You were wrong about Djkstra algorithm. It doesnt search all the possible paths. Instead it searches only the best path to vertex and uses it to search optimal path to it's neighbors. As it only makes updates from each vertex once and each update only uses one edge(as edge connects 2 vertexes it will only take part in 2 update attempts) it will have complexity O(|E| * upd) . As priority queue is used for updates, upd will have comlexity of O(log(|V|). So total complexity is O(|E| * log(|V|)) which is quiet fast and on average PC it will be able to handle graphs with amounts of edges and vertexes not greater than 100000 in 1 second

  • @igniculus_
    @igniculus_ 8 лет назад +41

    Name of this channel was different ... I like the new name though !!!

    • @kuskus_th13
      @kuskus_th13 8 лет назад +1

      He had trademark issues with Reading Rainbow, so he changed it.

    • @manuelbonet
      @manuelbonet 8 лет назад +3

      KusKusPL Wasn't it coding rainbow?

    • @AsifMehedi
      @AsifMehedi 8 лет назад

      Yes, but it was too similar.

    • @igniculus_
      @igniculus_ 8 лет назад

      Actually ... Even before that ... The channel name was his own name ... "Daniel Shiffman".

    • @manuelbonet
      @manuelbonet 8 лет назад +2

      Ani H.​ The channel had always been named Daniel Shiffman, but when he referred to his channel, he called it Coding Rainbow

  • @GRAHAMAUS
    @GRAHAMAUS 4 года назад +7

    Interesting how the animation at the beginning looks a bit like the "stepped leader" of a lightning strike. I wonder if this has any bearing on that phenomenon, which I believe isn't that well understood - could be an opportunity for some cross-disciplinary research.... :)

    • @sylv171
      @sylv171 4 года назад

      Actually, a lightning IS looking for the shorter way ! So i thinks that it's pretty much the same thing :)
      Sorry for my english i'm french ^^

    • @AshishBihani
      @AshishBihani 3 года назад

      Exactly the comment i was looking for!

  • @premnathd
    @premnathd 5 лет назад

    Thanks for showing result at the beginning of the video. Awesome

  • @hjjol9361
    @hjjol9361 7 лет назад

    I loved it, espescially the way that without diagonal or obstacle, each way take same time to travel, your grid is 25 by 25, if it go down, right alternativly it will take 25 down and 25 right move to the other side, just like to go on the edge of the grid is 25 down + 25 right :D !
    You helped me take the code train thank you prof. i would have kill to got prof like you in college.

    • @phizc
      @phizc 4 года назад

      Problem is that it's not actually A*. It's breadth first due to bugs. A* Would only need to check alternately going right down, right down etc or down right down right etc.
      It found an optimal path but it checked all 625 cells doing it. A* would also find an optimal path, but would need to check fewer cells.

  • @yt.mhasan
    @yt.mhasan 5 лет назад +4

    When I will go to USA, I will meet you no matter what. I love you, man ❤️

  • @_melts
    @_melts Год назад

    Web dev trying to build a game as a hobby project, such a good tutorial - thank you!

  • @mattt2684
    @mattt2684 7 лет назад +61

    You should do coding challenges on different languages, such as python or CPP

    • @scholli99
      @scholli99 5 лет назад +4

      Oh right. Python is much harder than JS XD

    • @bigombrello
      @bigombrello 5 лет назад +19

      @@scholli99 that was not the point even if python is easier writing the code is as challenging as js

    • @Doge317
      @Doge317 4 года назад +1

      Well p5 is a js library, and p3 is a java library, so it wouldn't make much sense to switch up those languages.

    • @ocakes_cakes
      @ocakes_cakes 4 года назад +8

      What he meant was, to do different languages for educational purposes it's not just about the difficulty, after all this channel is for sharing information about programming.

    • @pizzapanni
      @pizzapanni 4 года назад

      why ?

  • @bronsonsedeno8064
    @bronsonsedeno8064 8 лет назад +8

    I did this a few years ago in one of my intro classes to programming. Was hell, still have the file though :)

  • @nicholask9251
    @nicholask9251 7 лет назад

    Please keep making these vids, and thank you for teaching us

  • @pactube8833
    @pactube8833 4 года назад

    I love the energy he has
    Love you bro

  • @YoutubeAdministrator
    @YoutubeAdministrator 8 лет назад

    Well done on the editing. Watched the livestream and felt sorry for the editor. But nice result.

  • @benamiomer7819
    @benamiomer7819 7 лет назад

    I don't even code but your videos are really fun to watch it makes me want to learn it

  • @sudoaj
    @sudoaj 8 лет назад

    the joy of codingis to see the end result.....imaging dancing to that path as it finds its way to the end.

  • @asphaltproject3392
    @asphaltproject3392 4 года назад +1

    Thanks !!! You helped me a lot, and that works for Hex grids! (Of course just have to change neighbors conditions)

  • @Grizix
    @Grizix 8 лет назад +3

    To remove a value from an array in javascript, the two main solutions I know are .filter and .splice(.indexOf)

  • @MarkusBurrer
    @MarkusBurrer 7 лет назад +1

    This is a good video about A* pathfinding, but there are a lot of videos for simple 2d grids. What I miss are tutorials how I can implement A* in a 3d voxel world like Minecraft or Minetest, including jumping, fall height and so on. This is far more complex than the basic 2d grid algorithm

  • @Humance
    @Humance 8 лет назад +3

    i don't understand any of that but i find it fascinating!

  • @youssefsoliman3341
    @youssefsoliman3341 4 года назад +1

    iam happy to see this work !

  • @aliceorwell7541
    @aliceorwell7541 8 лет назад +1

    I absolutely love these coding challenges! Keep being awesome.

  • @codingblocks3495
    @codingblocks3495 4 года назад

    You deserve MORE MORE MORE Subscribers

  • @lbastos1
    @lbastos1 4 года назад +6

    26:35 if splice removes an element in the given index of the array, couldn't you use it as instead of creating the function removeFromArray? Loving the content ❤

    • @pascha4527
      @pascha4527 3 года назад

      yes.. Let's just say his brain's think quicker than a machine already so he doesn't need that extra optimisation :')

  • @MR_KALI_YT_007
    @MR_KALI_YT_007 3 года назад

    OMG 😱😱😍 amazing challenge

  • @thomas.alrek.90
    @thomas.alrek.90 7 лет назад +14

    I know this is an old video, but a more effective way of removing a specific element from an array could be written as:
    var myArr = ["foo", "bar", "bas"]
    var element = myArr[2] //"bas"
    function removeFromArray(arr, el) {
    let i = arr.indexOf(el)
    if (i > -1) {
    arr.splice(i, 1)
    }
    return arr
    }
    myArr = removeFromArray(element)

    • @xerxius5446
      @xerxius5446 4 года назад

      use filter instead
      // remove 2 from array
      [1,2,3].filter(i => i !== 2)
      I would personally use a linked list if random access is not needed and there is a lot of insertion / deletion happening

    • @mannyc6649
      @mannyc6649 4 года назад

      In this case your function is definitely better and faster. But it's not equivalent to what he wrote in general. If an array has duplicate elements his function will remove all of them while yours only the first occurrence (assuming that indexOf returns the first occurrence). I just wanted to point that out.

    • @mannyc6649
      @mannyc6649 4 года назад

      @@xerxius5446 I agree. I was referring to the code in the parent comment, not yours :)

    • @chrismanning5232
      @chrismanning5232 4 года назад +1

      The most effective way is just to use the winner variable, which already had the index of the item (and he instantly forgot that). Just openSet.splice(winner,1)

  • @adityakulshrestha7033
    @adityakulshrestha7033 3 года назад

    I love your videos because it builds logic 😊

  • @bitworld2848
    @bitworld2848 7 лет назад +2

    I like how you explain what's going on, and what you're going to do next, and why.

  • @timeslongpast
    @timeslongpast 8 лет назад

    I found your channel about a month before your channel name changed from coding rainbow to Daniel Shiffman to coding train and I got really confused as to why the super awesome intro you had was all blurred out. Now I understand though. Anyway you are doing a great job and I love seeing your processing videos.

    • @TheCodingTrain
      @TheCodingTrain  8 лет назад

      I'm wondering if I should have left the channel name to "Daniel Shiffman" even if the name name is "Coding Train" . .

    • @kenan2386
      @kenan2386 3 года назад

      Keep it as Coding Train

  • @tylerhanson133
    @tylerhanson133 5 лет назад

    Thanks this helped me solve a real world problem!

  • @maxtaniepetitdol9986
    @maxtaniepetitdol9986 8 лет назад +3

    Dude you're just amazing. Programming is so great!!!

  • @eljhones18
    @eljhones18 Год назад +6

    I loved the part when pathfinder says "get ready, its Zipline time" and start pathfinding all over the place

  • @MassimoCarloMoscardi
    @MassimoCarloMoscardi 3 года назад

    Beautifull video very nice to view your channel is Very wonderfull go again

  • @abdlbasetsaci4488
    @abdlbasetsaci4488 7 лет назад

    thanks you are awsome man !!.we need more complicated videos

  • @Gregzenegair
    @Gregzenegair 8 лет назад +6

    Go to the coding Choppa !

    • @vojvoda-draza
      @vojvoda-draza 8 лет назад +1

      Gregzenegair Skynet
      "put the cookie down" - Arnold Schwarzenegger

  • @coolbreeze2974
    @coolbreeze2974 3 года назад

    I wish you were my teacher, and thank you for teaching me how to code

  • @teeraucher
    @teeraucher 7 лет назад

    I already wrote A* in vb.net to learn how it works. (Tip: Don't write it recursive. The Stack will overflow.) But I started watching this video so see how some one would explain it. But now I am more interested in the p5* framework xD. (btw. very entertaining video #Like)

  • @anteconfig5391
    @anteconfig5391 7 лет назад +41

    Wow I'm a whole year late to this video.

  • @birnenkopf89
    @birnenkopf89 4 года назад

    you are wonderfull, very entertaining see your coding process.

  • @steadexe
    @steadexe 8 лет назад +1

    Thanks to this channel I moved all my draw engine of my project to p5 :D

  • @AshishNallana
    @AshishNallana 4 года назад

    This algorithm project is very interesting & amazing

  • @noutkleef4458
    @noutkleef4458 8 лет назад +3

    yesss A*!! awesome

  • @Freque
    @Freque 7 лет назад +1

    I don't want to take anything away from you, it's a great tutorial for understanding A* in a simpler situation. But using a grid with obstacles... does that not sound like a more straightforward Lee algorithm? From what I know, in Dijkstra and A* it's the vertices that have a certain cost, and in a grid that is always 1. Again, it's an awesome idea to simplify the concept, but this time it might be a bit confusing, as you ignore a crucial element from the generalized algorithm, and, even though it's harder to understand for some, I think it just has to use graphs. Amazing channel though. I love your simplicity and enthusiasm.

  • @AndreasHLux
    @AndreasHLux 2 года назад

    Wow, noch einer der schon Schall absondern kann!

  • @officiallyaninja
    @officiallyaninja 5 лет назад

    I can't believe you take the time to like comments years after the videos come out.

  • @MR_KALI_YT_007
    @MR_KALI_YT_007 3 года назад

    Amazing 😍 video ❣️👌

  • @gregoirepelegrin1966
    @gregoirepelegrin1966 4 года назад +2

    "Are you still watching?"
    Me, who just watched the entire coding challenge playlist: MOOOOOOOOOOOOOOOOOOOOORE

  • @matthewrice7590
    @matthewrice7590 7 лет назад

    Wow. Just started studying computer science in college in the past year, and with most of your challenges I am able to follow along pretty well and feel comfortable with my understanding of your processes. This on the other hand...first time watching is kind of a mind f***.

  • @dylansanderson3386
    @dylansanderson3386 6 лет назад

    id sell my soul, donate kidney, donate blood, donate a leg to be as smart as this guy is in software.

  • @anandg4018
    @anandg4018 4 года назад +1

    Finally sunder pitchai's official youtube channel😂🤘

  • @WolfRose11
    @WolfRose11 2 года назад

    5:09 I think they just use g(n) and h(n) because g and h come after f in the alphabet. So it means that f(n) is the sum of the results of 2 other equations.

  • @halcyonramirez6469
    @halcyonramirez6469 2 года назад +1

    in the for loop with at 12:25 lines 14-16.
    shouldn't the rows be first and then the columns?
    I mean when you iterate through the 2D array you choose the row first and then the columns.
    arr = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    arr[0][0] is 1st row 1st column not 1st column 1st row.
    am I missing something here?

    • @Nicogs
      @Nicogs 10 месяцев назад

      yes, he used cols for rows and visa versa

  • @ChiniMini-ChujuMuju
    @ChiniMini-ChujuMuju 4 года назад

    Thanks, man !! You saved my day. I was struggling with this algorithm and your video helped me a lot. One thing I want to ask you. What could be other good heuristics methods we can use here (except euclidean and manhattan)?

  • @avatar098
    @avatar098 Год назад

    Many years later… but I just wanted to point out that dijkstra’s doesn’t actually search all possible paths like some backtracking DFS. It greedily chooses the shortest routes to the next node from the node it’s currently on. That’s why it’s faster with ElgV time (and possibly faster depending on the data structure you use to track the current shortest edge you found)
    It also can’t work on negative edges or else the heap your using will break the invariant assumption you’re making (the fastest route to me is myself, 0). That means negative edges will break that invariant, but the minheap doesn’t know any better :)

    • @avatar098
      @avatar098 Год назад

      ….unless you’re using uniform weighted edges (or non weighted). In which case Dijkstra’s will essentially turn into BFS behavior. BFS is guaranteed to find shortest paths but will take longer O(VE)

  • @tillroberg1730
    @tillroberg1730 7 лет назад

    Thaaaaaanks a lot! You are a genius! Well explained and easy to follow. Thanks to you I finally understood what A* is actually doing and I got this big piece of homework done. Thanksthankthanks and did I thank you already?

  • @expeng5861
    @expeng5861 5 лет назад

    wonderful challenge coding game.

  • @videosdiversos3290
    @videosdiversos3290 3 года назад

    Sucesso Ao Canal 👍😀👍

  • @katiesilva7651
    @katiesilva7651 7 лет назад +3

    first tried to do this without a tutorial. I started at (1, 1)(on a grid) and tried to get to (1, 2). let's just say it went to (-1, 0) then had an infinite loop