µ±Ç°Î»ÖãºÖ÷Ò³ > ²é¿´ÄÚÈÝ

ÊÖ°ÑÊÖ½ÌÄãË¢ËÑË÷

·¢²¼Ê±¼ä£º2021-06-05 00:00| ÓРλÅóÓѲ鿴

¼ò½é£º´ó»°ËÑË÷ ËÑË÷Ò»°ãÖ¸ÔÚÓÐÏÞµÄ״̬¿Õ¼äÖнøÐÐö¾Ù£¬Í¨¹ýÇËùÓеĿÉÄÜÀ´ÕÒµ½·ûºÏÌõ¼þµÄ½â»òÕß½âµÄ¸öÊý¡£¸ù¾ÝËÑË÷·½Ê½µÄ²»Í¬£¬ËÑË÷Ëã·¨¿ÉÒÔ·ÖΪ DFS£¬BFS£¬A*Ëã·¨µÈ¡£ÕâÀïÖ»½éÉÜ DFS ºÍ BFS£¬ÒÔ¼°·¢ÉúÔÚ DFS ÉÏÒ»ÖÖ¼¼ÇÉ-»ØËÝ¡£ ËÑË÷ÎÊÌ⸲¸ÇÃæ·Ç³£¹ã·º£¬²¢ÇÒ¡­¡­

´ó»°ËÑË÷

ËÑË÷Ò»°ãÖ¸ÔÚÓÐÏÞµÄ״̬¿Õ¼äÖнøÐÐö¾Ù£¬Í¨¹ýÇËùÓеĿÉÄÜÀ´ÕÒµ½·ûºÏÌõ¼þµÄ½â»òÕß½âµÄ¸öÊý¡£¸ù¾ÝËÑË÷·½Ê½µÄ²»Í¬£¬ËÑË÷Ëã·¨¿ÉÒÔ·ÖΪ DFS£¬BFS£¬A*Ëã·¨µÈ¡£ÕâÀïÖ»½éÉÜ DFS ºÍ BFS£¬ÒÔ¼°·¢ÉúÔÚ DFS ÉÏÒ»ÖÖ¼¼ÇÉ-»ØËÝ¡£

ËÑË÷ÎÊÌ⸲¸ÇÃæ·Ç³£¹ã·º£¬²¢ÇÒÔÚËã·¨ÌâÖÐÒ²Õ¼¾ÝÁ˺ܸߵıÈÀý¡£ÎÒÉõÖÁ»¹ÔÚ¹«¿ªÑݽ²ÖÐÌáµ½ÁË Ç°¶ËËã·¨ÃæÊÔÖÐËÑË÷ÀàÕ¼¾ÝÁ˺ܴóµÄ±ÈÖØ£¬ÓÈÆäÊǹúÄÚ¹«Ë¾¡£

ËÑË÷רÌâÖеÄ×ÓרÌâÓкܶ࣬¶ø´ó¼ÒËùÊìÖªµÄ BFS£¬DFS Ö»ÊÇÆäÖÐÌرð»ù´¡µÄÄÚÈÝ¡£³ý´ËÖ®Í⣬»¹ÓÐ״̬¼Ç¼Óëά»¤£¬¼ôÖ¦£¬ÁªÍ¨·ÖÁ¿£¬ÍØÆËÅÅÐòµÈµÈ¡£ÕâЩÄÚÈÝ£¬ÎÒ»áÔÚÕâÀïÒ»Ò»¸ø´ó¼Ò½éÉÜ¡£

ÁíÍ⼴ʹ½ö½ö¿¼ÂÇ DFS ºÍ BFS Á½ÖÖ»ù±¾Ëã·¨£¬ÀïÃæÄÜÍæµÄ»¨ÑùÒ²·Ç³£¶à¡£±ÈÈç BFS µÄË«ÏòËÑË÷£¬±ÈÈç DFS µÄÇ°ÖкóÐò£¬µü´ú¼ÓÉîµÈµÈ¡£

¹ØÓÚËÑË÷£¬ÆäʵÔÚ¶þ²æÊ÷²¿·ÖÒѾ­×öÁ˽éÉÜÁË¡£¶øÕâÀïµÄËÑË÷£¬Æäʵ¾ÍÊǽøÒ»²½µÄ·º»¯¡£Êý¾Ý½á¹¹²»ÔÙ¾ÖÏÞÓÚÇ°ÃæÌáµ½µÄÊý×飬Á´±í»òÕßÊ÷¡£¶øÀ©Õ¹µ½ÁËÖîÈç¶þάÊý×飬¶à²æÊ÷£¬Í¼µÈ¡£²»¹ýºËÐÄÈÔÈ»ÊÇÒ»ÑùµÄ£¬Ö»²»¹ýÊý¾Ý½á¹¹·¢ÉúÁ˱仯¶øÒÑ¡£

ËÑË÷µÄºËÐÄÊÇʲô£¿

ʵ¼ÊÉÏËÑË÷ÌâÄ¿±¾ÖʾÍÊǽ«ÌâÄ¿ÖеÄ״̬ӳÉäΪͼÖеĵ㣬½«×´Ì¬¼äµÄÁªÏµÓ³ÉäΪͼÖеıߡ£¸ù¾ÝÌâÄ¿ÐÅÏ¢¹¹½¨×´Ì¬¿Õ¼ä£¬È»ºó¶Ô״̬¿Õ¼ä½øÐбéÀú£¬±éÀú¹ý³ÌÐèÒª¼Ç¼ºÍά»¤×´Ì¬£¬²¢Í¨¹ý¼ôÖ¦ºÍÊý¾Ý½á¹¹µÈÌá¸ßËÑË÷ЧÂÊ¡£

״̬¿Õ¼äµÄÊý¾Ý½á¹¹²»Í¬»áµ¼ÖÂËã·¨²»Í¬¡£±ÈÈç¶ÔÊý×é½øÐÐËÑË÷£¬ºÍ¶ÔÊ÷£¬Í¼½øÐÐËÑË÷¾Í²»Ì«Ò»Ñù¡£

ÔÙ´ÎÇ¿µ÷һϣ¬ÎÒÕâÀï½²µÄÊý×飬Ê÷ºÍͼÊÇ״̬¿Õ¼äµÄÂß¼­½á¹¹£¬¶ø²»ÊÇÌâÄ¿¸øµÄÊý¾Ý½á¹¹¡£±ÈÈçÌâÄ¿¸øÁËÒ»¸öÊý×飬ÈÃÄãÇóÊý×éµÄËÑË÷×Ó¼¯¡£ËäÈ»ÌâÄ¿¸øµÄÏßÐÔµÄÊý¾Ý½á¹¹Êý×飬Ȼ¶øʵ¼ÊÉÏÎÒÃÇÊǶÔÊ÷ÕâÖÖ·ÇÏßÐÔÊý¾Ý½á¹¹½øÐÐËÑË÷¡£ÕâÊÇÒòΪÕâµÀÌâ¶ÔÓ¦µÄ״̬¿Õ¼äÊÇ·ÇÏßÐԵġ£

¶ÔÓÚËÑË÷ÎÊÌ⣬ÎÒÃǺËÐĹØ×¢µÄÐÅÏ¢ÓÐÄÄЩ£¿ÓÖ¸ÃÈçºÎ¼ÆËãÄØ£¿ÕâÒ²ÊÇËÑË÷ƪºËÐĹØ×¢µÄ¡£¶øÊÐÃæÉϺܶà×ÊÁϽ²ÊöµÄ²»ÊǺÜÏêϸ¡£ËÑË÷µÄºËÐÄÐèÒª¹Ø×¢µÄÖ¸±êÓкܶ࣬±ÈÈçÊ÷µÄÉî¶È£¬Í¼µÄ DFS Ðò£¬Í¼ÖÐÁ½µã¼äµÄ¾àÀëµÈµÈ¡£ÕâЩָ±ê¶¼ÊÇÍê³É¸ß¼¶Ëã·¨±Ø²»¿ÉÉٵģ¬¶øÕâЩָ±ê¿ÉÒÔͨ¹ýһЩ¾­µäËã·¨À´ÊµÏÖ¡£ÕâÒ²ÊÇΪʲôÎÒһֱǿµ÷Ò»¶¨ÒªÏÈѧϰºÃ»ù´¡µÄÊý¾Ý½á¹¹ÓëËã·¨µÄÔ­Òò¡£

²»¹ýÒª½²ÕâЩ½²ÊöÍêÕû²¢·ÇÈÝÒ×£¬ÒÔÖÁÓÚÈç¹ûÍêÕûдÍê¿ÉÄÜÐèÒª»¨ºÜ¶àµÄʱ¼ä£¬Òò´ËһֱûÓж¯ÊÖȥд¡£

ÁíÍâÓÉÓÚÆäËûÊý¾Ý½á¹¹¶¼¿ÉÒÔ¿´×öÊÇͼµÄÌØÀý¡£Òò´ËÑо¿Í¸Í¼µÄ»ù±¾Ë¼Ï룬¾ÍºÜÈÝÒ×½«ÆäÀ©Õ¹µ½ÆäËûÊý¾Ý½á¹¹ÉÏ£¬±ÈÈçÊ÷¡£Òò´ËÎÒ´òËãΧÈÆͼ½øÐн²½â£¬²¢Öð²½¾ßÏ󻯵½ÆäËûÌØÊâµÄÊý¾Ý½á¹¹£¬±ÈÈçÊ÷¡£

״̬¿Õ¼ä

½áÂÛÏÈÐУº×´Ì¬¿Õ¼äÆäʵ¾ÍÊÇÒ»¸öͼ½á¹¹£¬Í¼ÖеĽڵã±íʾ״̬£¬Í¼Öеı߱íʾ״̬֮ǰµÄÁªÏµ£¬ÕâÖÖÁªÏµ¾ÍÊÇÌâÄ¿¸ø³öµÄ¸÷ÖÖ¹Øϵ¡£

ËÑË÷ÌâÄ¿µÄ״̬¿Õ¼äͨ³£ÊÇ·ÇÏßÐԵġ£±ÈÈçÉÏÃæÌáµ½µÄÀý×Ó£ºÇóÒ»¸öÊý×éµÄ×Ó¼¯¡£ÕâÀïµÄ״̬¿Õ¼äʵ¼ÊÉϾÍÊÇÊý×éµÄ¸÷ÖÖ×éºÏ¡£

¶ÔÓÚÕâµÀÌâÀ´Ëµ£¬Æä״̬¿Õ¼äµÄÒ»ÖÖ¿ÉÐеĻ®·Ö·½Ê½Îª£º

  • ³¤¶ÈΪ 1 µÄ×Ó¼¯
  • ³¤¶ÈΪ 2 µÄ×Ó¼¯
  • ¡£¡£¡£
  • ³¤¶ÈΪ n µÄ×Ó¼¯£¨ÆäÖÐ n ΪÊý×鳤¶È£©

¶øÈçºÎÈ·¶¨ÉÏÃæËùÓеÄ×Ó¼¯ÄØ¡£

Ò»ÖÖ¿ÉÐеķ½°¸ÊÇ¿ÉÒÔ²ÉÈ¡ÀàËÆ·ÖÖεķ½Ê½Öðһȷ¶¨¡£

±ÈÈçÎÒÃÇ¿ÉÒÔ£º

  • ÏÈÈ·¶¨Ä³Ò»ÖÖ×Ó¼¯µÄµÚÒ»¸öÊýÊÇʲô
  • ÔÙÈ·¶¨µÚ¶þ¸öÊýÊÇʲô
  • ¡£¡£¡£

ÈçºÎÈ·¶¨µÚÒ»¸öÊý£¬µÚ¶þ¸öÊý¡£¡£¡£ÄØ£¿

±©Á¦Ã¶¾ÙËùÓпÉÄܾͿÉÒÔÁË¡£

Õâ¾ÍÊÇËÑË÷ÎÊÌâµÄºËÐÄ£¬ÆäËû¶¼ÊǸ¨Öú£¬ËùÒÔÕâ¾ä»°ÇëÎñ±Ø¼Çס¡£

ËùνµÄ±©Á¦Ã¶¾ÙËùÓпÉÄÜÔÚÕâÀï¾ÍÊdz¢ÊÔÊý×éÖÐËùÓпÉÄܵÄÊý×Ö¡£

  • ±ÈÈçµÚÒ»¸öÊýÊÇʲô£¿ºÜÃ÷ÏÔ¿ÉÄÜÊÇÊý×éÖÐÈÎÒâÒ»Ïî¡£ok£¬ÎÒÃǾÍö¾Ù n ÖÖÇé¿ö¡£
  • µÚ¶þ¸öÊýÄØ£¿ºÜÃ÷ÏÔ¿ÉÒÔÊdzýÁËÉÏÃæÒѾ­±»Ñ¡ÔñµÄÊýÖ®ÍâµÄÈÎÒâÒ»¸öÊý¡£ok£¬ÎÒÃǾÍö¾Ù n - 1 ÖÖÇé¿ö¡£

¾Ý´Ë£¬Äã¿ÉÒÔ»­³öÈçϵľö²ßÊ÷¡£

£¨ÏÂͼÃèÊöµÄÊǶÔÒ»¸ö³¤¶ÈΪ 3 µÄÊý×é½øÐоö²ßµÄ²¿·Ö¹ý³Ì£¬Ê÷½ÚµãÖеÄÊý×Ö±íʾË÷Òý¡£¼´È·¶¨µÚÒ»¸öÊýÓÐÈý¸öÑ¡Ôñ£¬È·¶¨µÚ¶þ¸öÊý»á¸ù¾ÝÉϴεÄÑ¡Ôñ±äΪʣϵÄÁ½¸öÑ¡Ôñ£©

¾ö²ß¹ý³Ì¶¯Í¼ÑÝʾ£º

ËÑË÷-¾ö²ßÊ÷.svg

һЩËÑË÷Ëã·¨¾ÍÊÇ»ùÓÚÕâ¸öÆÓËصÄ˼Ï룬±¾ÖʾÍÊÇÄ£ÄâÕâ¸ö¾ö²ßÊ÷¡£ÕâÀïÃæÆäʵҲÓкܶàÓÐȤµÄϸ½Ú£¬ºóÃæÎÒÃÇ»á¶ÔÆä½øÐиü¼ÓÏêϸµÄ½²½â¡£¶øÏÖÔÚ´ó¼ÒÖ»ÐèÒª¶Ô½â¿Õ¼äÊÇʲôÒÔ¼°ÈçºÎ¶Ô½â¿Õ¼ä½øÐбéÀúÓÐÒ»µã¸ÅÄî¾ÍÐÐÁË¡£ ºóÃæÎÒ»á¼ÌÐø¶ÔÕâ¸ö¸ÅÄî½øÐмÓÉî¡£

ÕâÀï´ó¼ÒÖ»Òª¼Çס״̬¿Õ¼ä¾ÍÊÇͼ£¬¹¹½¨×´Ì¬¿Õ¼ä¾ÍÊǹ¹½¨Í¼¡£ÈçºÎ¹¹½¨ÄØ£¿µ±È»ÊǸù¾ÝÌâÄ¿ÃèÊöÁË ¡£

DFS ºÍ BFS

DFS ºÍ BFS ÊÇËÑË÷µÄºËÐÄ£¬¹á´©ËÑË÷ƪµÄʼÖÕ£¬Òò´ËÓбØÒªÏȶÔÆä½øÐн²½â¡£

DFS

DFS µÄ¸ÅÄîÀ´×ÔÓÚͼÂÛ£¬µ«ÊÇËÑË÷ÖÐ DFS ºÍͼÂÛÖÐ DFS »¹ÊÇÓÐһЩÇø±ð£¬ËÑË÷ÖÐ DFS Ò»°ãÖ¸µÄÊÇͨ¹ýµÝ¹éº¯ÊýʵÏÖ±©Á¦Ã¶¾Ù¡£

Èç¹û²»Ê¹Óõݹ飬Ҳ¿ÉÒÔʹÓÃÕ»À´ÊµÏÖ¡£²»¹ý±¾ÖÊÉÏÊÇÀàËƵġ£

Ê×ÏȽ«ÌâÄ¿µÄ״̬¿Õ¼äÓ³Éäµ½Ò»ÕÅͼ£¬×´Ì¬¾ÍÊÇͼÖеĽڵ㣬״̬֮¼äµÄÁªÏµ¾ÍÊÇͼÖеıߣ¬ÄÇô DFS ¾ÍÊÇÔÚÕâÖÖͼÉϽøÐÐÉî¶ÈÓÅÏȵıéÀú¡£¶ø BFS Ò²ÊÇÀàËÆ£¬Ö»²»¹ý±éÀúµÄ²ßÂÔ±äΪÁ˹ã¶ÈÓÅÏÈ£¬Ò»²ã²ãÆÌ¿ª¶øÒÑ¡£ËùÒÔBFS ºÍ DFS Ö»ÊDZéÀúÕâ¸ö״̬ͼµÄÁ½ÖÖ·½Ê½°ÕÁË£¬ÈçºÎ¹¹½¨×´Ì¬Í¼²ÅÊǹؼü¡£

±¾ÖÊÉÏ£¬¶ÔÉÏÃæµÄͼ½øÐбéÀúµÄ»°»áÉú³ÉÒ»¿ÅËÑË÷Ê÷¡£ÎªÁ˱ÜÃâÖظ´·ÃÎÊ£¬ÎÒÃÇÐèÒª¼Ç¼ÒѾ­·ÃÎʹýµÄ½Úµã¡£ÕâЩÊÇËùÓеÄËÑË÷Ëã·¨¹²Óеģ¬ºóÃæ²»ÔÙ׸Êö¡£

Èç¹ûÄãÊÇÔÚÊ÷ÉϽøÐбéÀú£¬ÊDz»»áÓл·µÄ£¬Ò²×ÔÈ»²»ÐèҪΪÁ˱ÜÃâ»·µÄ²úÉú¼Ç¼ÒѾ­·ÃÎʵĽڵ㣬ÕâÊÇÒòΪÊ÷±¾ÖÊÉÏÊÇÒ»¸ö¼òµ¥ÎÞ»·Í¼¡£

Ëã·¨Á÷³Ì

  1. Ê×ÏȽ«¸ù½Úµã·ÅÈëstackÖС£
  2. ´ÓstackÖÐÈ¡³öµÚÒ»¸ö½Úµã£¬²¢¼ìÑéËüÊÇ·ñΪĿ±ê¡£Èç¹ûÕÒµ½Ä¿±ê£¬Ôò½áÊøËÑÑ°²¢»Ø´«½á¹û¡£·ñÔò½«Ëüijһ¸öÉÐδ¼ìÑé¹ýµÄÖ±½Ó×Ó½Úµã¼ÓÈëstackÖС£
  3. Öظ´²½Öè 2¡£
  4. Èç¹û²»´æÔÚδ¼ì²â¹ýµÄÖ±½Ó×ӽڵ㡣½«ÉÏÒ»¼¶½Úµã¼ÓÈëstackÖС£
    Öظ´²½Öè 2¡£
  5. Öظ´²½Öè 4¡£
  6. ÈôstackΪ¿Õ£¬±íʾÕûÕÅͼ¶¼¼ì²é¹ýÁË¡ª¡ªÒ༴ͼÖÐûÓÐÓûËÑÑ°µÄÄ¿±ê¡£½áÊøËÑÑ°²¢»Ø´«¡°ÕÒ²»µ½Ä¿±ê¡±¡£
ÕâÀïµÄ stack ¿ÉÒÔÀí½âΪ×ÔʵÏÖµÄÕ»£¬Ò²¿ÉÒÔÀí½âΪµ÷ÓÃÕ»

Ë㷨ģ°å

ÏÂÃæÎÒÃǽèÖúµÝ¹éÀ´Íê³É DFS¡£

const visited = {}
function dfs(i) {
    if (Âú×ãÌض¨Ìõ¼þ£©{
        // ·µ»Ø½á¹û or Í˳öËÑË÷¿Õ¼ä
    }

    visited[i] = true // ½«µ±Ç°×´Ì¬±êΪÒÑËÑË÷
    for (¸ù¾ÝiÄܵ½´ïµÄϸö״̬j) {
        if (!visited[j]) { // Èç¹û״̬jûÓб»ËÑË÷¹ý
            dfs(j)
        }
    }
}

³£Óü¼ÇÉ

Ç°Ðò±éÀúÓëºóÐò±éÀú

DFS ³£¼ûµÄÐÎʽÓÐÇ°ÐòºÍºóÐò¡£¶þÕßµÄʹÓó¡¾°Ò²ÊǽØÈ»²»Í¬µÄ¡£

ÉÏÃæ½²ÊöÁËËÑË÷±¾ÖʾÍÊÇÔÚ״̬¿Õ¼ä½øÐбéÀú£¬¿Õ¼äÖеÄ״̬¿ÉÒÔ³éÏóΪͼÖеĵ㡣ÄÇôÈç¹ûËÑË÷¹ý³ÌÖУ¬µ±Ç°µãµÄ½á¹ûÐèÒªÒÀÀµÆäËû½Úµã£¨´ó¶àÊýÇé¿ö¶¼»áÓÐÒÀÀµ£©£¬ÄÇô±éÀú˳Ðò¾Í±äµÃÖØÒª¡£

±ÈÈ統ǰ½ÚµãÐèÒªÒÀÀµÆä×Ó½ÚµãµÄ¼ÆËãÐÅÏ¢£¬ÄÇôʹÓúóÐò±éÀú×Ôµ×ÏòÉϵÝÍƾÍÏԵñØÒªÁË¡£¶øÈç¹ûµ±Ç°½ÚµãÐèÒªÒÀÀµÆ丸½ÚµãµÄÐÅÏ¢£¬ÄÇôʹÓÃÏÈÐò±éÀú½øÐÐ×Ô¶¥Ïòϵĵݹé¾Í²»ÄÑÏëµ½¡£

±ÈÈçÏÂÎÄÒª½²µÄ¼ÆËãÊ÷µÄÉî¶È¡£ÓÉÓÚÊ÷µÄÉî¶ÈµÄµÝ¹é¹«Ê½Îª£º $f(x) = f(y) + 1$¡£ÆäÖÐ f(x) ±íʾ½Úµã x µÄÉî¶È£¬²¢ÇÒ x ÊÇ y µÄ×ӽڵ㡣ºÜÃ÷ÏÔÕâ¸öµÝÍƹ«Ê½µÄ base case ¾ÍÊǸù½ÚµãÉî¶ÈΪһ£¬Í¨¹ýÕâ¸ö base case ÎÒÃÇ¿ÉÒÔµÝÍÆÇó³öÊ÷ÖÐÈÎÒâ½ÚµãµÄÉî¶È¡£ÏÔÈ»£¬Ê¹ÓÃÏÈÐò±éÀú×Ô¶¥Ïòϵķ½Ê½Í³¼ÆÊǼòµ¥¶øÓÖÖ±½ÓµÄ¡£

ÔÙ±ÈÈçÏÂÎÄÒª½²µÄ¼ÆËãÊ÷µÄ×Ó½Úµã¸öÊý¡£ÓÉÓÚÊ÷µÄ×Ó½ÚµãµÝ¹é¹«Ê½Îª£º $f(x) = sum_{i=0}^{n}{f(a_i)}$ ÆäÖÐ x ΪÊ÷ÖеÄijһ¸ö½Úµã£¬$a_i$ ΪÊ÷ÖнڵãµÄ×ӽڵ㡣¶ø base case ÔòÊÇûÓÐÈκÎ×Ó½Úµã(Ò²¾ÍÊÇÒ¶×Ó½Úµã)£¬´Ëʱ $f(x) = 1$¡£ Òò´ËÎÒÃÇ¿ÉÒÔÀûÓúóÐò±éÀú×Ôµ×ÏòÉÏÀ´Íê³É×Ó½Úµã¸öÊýµÄͳ¼Æ¡£

¹ØÓÚ´ÓµÝÍƹØϵ·ÖÎöʹÓúÎÖÖ±éÀú·½·¨£¬ ÎÒÔÚ¡¶91 ÌìѧËã·¨¡·ÖеĻù´¡ÆªÖеġ¶Ä£Ä⣬ö¾ÙÓëµÝÍÆ¡·×ÓרÌâÖжԴ˽øÐÐÁËÏêϸµÄÃèÊö¡£91 ѧԱ¿ÉÒÔÖ±½Ó½øÐв鿴¡£¹ØÓÚÊ÷µÄ¸÷ÖÖ±éÀú·½·¨£¬ÎÒÔÚÊ÷רÌâÖнøÐÐÁËÏêϸµÄ½éÉÜ¡£

µü´ú¼ÓÉî

µü´ú¼ÓÉî±¾ÖÊÉÏÊÇÒ»ÖÖ¿ÉÐÐÐԵļôÖ¦¡£¹ØÓÚ¼ôÖ¦£¬ÎÒ»áÔÚºóÃæµÄ¡¶»ØËÝÓë¼ôÖ¦¡·²¿·Ö×ö¸ü¶àµÄ½éÉÜ¡£

Ëùνµü´ú¼ÓÉîÖ¸µÄÊÇÔڵݹéÊ÷±È½ÏÉîµÄʱºò£¬Í¨¹ýÉ趨µÝ¹éÉî¶ÈãÐÖµ£¬³¬¹ýãÐÖµ¾ÍÍ˳öµÄ·½Ê½Ö÷¶¯¼õÉٵݹéÉî¶ÈµÄÓÅ»¯ÊֶΡ£ÕâÖÖËã·¨³ÉÁ¢µÄÇ°ÌáÊÇÌâÄ¿ÖиæËßÎÒÃǴ𰸲»³¬¹ý xxx£¬ÕâÑùÎÒÃÇ¿ÉÒÔ½« xxx ×÷ΪµÝ¹éÉî¶ÈãÐÖµ£¬ÕâÑù²»½ö²»»á´í¹ýÕýÈ·½â£¬»¹ÄÜÔÚ¼«¶ËÇé¿öÏÂÓÐЧ¼õÉÙ²»±ØÐëµÄÔËËã¡£

¾ßÌåµØ£¬ÎÒÃÇ¿ÉÒÔʹÓÃ×Ô¶¥Ïòϵķ½Ê½¼Ç¼µÝ¹éÊ÷µÄ²ã´Î£¬ºÍÉÏÃæ½éÉÜÈçºÎ¼ÆËãÊ÷Éî¶ÈµÄ·½·¨ÊÇÒ»ÑùµÄ¡£½ÓÏÂÀ´ÔÚÖ÷Âß¼­Ç°Ôö¼Óµ±Ç°²ã´ÎÊÇ·ñ³¬¹ýãÐÖµµÄÅжϼ´¿É¡£

Ö÷´úÂ룺

MAX_LEVEL = 20
def dfs(root, level):
    if level > MAX_LEVEL: return
    # Ö÷Âß¼­
dfs(root, 0)

ÕâÖÖ¼¼ÇÉÔÚʵ¼ÊʹÓÃÖв¢²»³£¼û£¬²»¹ýÔÚijЩʱºòÄÜ·¢»ÓÒâÏë²»µ½µÄ×÷Óá£

Ë«ÏòËÑË÷

ÓÐʱºòÎÊÌâ¹æÄ£ºÜ´ó£¬Ö±½ÓËÑË÷»á³¬Ê±¡£´Ëʱ¿ÉÒÔ¿¼ÂÇ´ÓÆðµãËÑË÷µ½ÎÊÌâ¹æÄ£µÄÒ»°ë¡£È»ºó½«´Ë¹ý³ÌÖвúÉúµÄ״̬´æÆðÀ´¡£½ÓÏÂÀ´Ä¿±êת»¯ÎªÔÚ´æ´¢µÄÖмä״̬ÖÐÑ°ÕÒÂú×ãÌõ¼þµÄ״̬¡£½ø¶ø´ïµ½½µµÍʱ¼ä¸´ÔӶȵÄЧ¹û¡£

ÉÏÃæµÄ˵·¨¿ÉÄܲ»Ì«ÈÝÒ×Àí½â¡£ ½ÓÏÂÀ´Í¨¹ýÒ»¸öÀý×Ó°ïÖú´ó¼ÒÀí½â¡£

ÌâÄ¿µØÖ·

https://leetcode-cn.com/probl...

ÌâÄ¿ÃèÊö
¸øÄãÒ»¸öÕûÊýÊý×é nums ºÍÒ»¸öÄ¿±êÖµ goal ¡£

ÄãÐèÒª´Ó nums ÖÐÑ¡³öÒ»¸ö×ÓÐòÁУ¬Ê¹×ÓÐòÁÐÔªËØ×ܺÍ×î½Ó½ü goal ¡£Ò²¾ÍÊÇ˵£¬Èç¹û×ÓÐòÁÐÔªËغÍΪ sum £¬ÄãÐèÒª ×îС»¯¾ø¶Ô²î abs(sum - goal) ¡£

·µ»Ø abs(sum - goal) ¿ÉÄÜµÄ ×îСֵ ¡£

×¢Ò⣬Êý×éµÄ×ÓÐòÁÐÊÇͨ¹ýÒƳýԭʼÊý×éÖеÄijЩԪËØ£¨¿ÉÄÜÈ«²¿»òÎÞ£©¶øÐγɵÄÊý×é¡£

?

ʾÀý 1£º

ÊäÈ룺nums = [5,-7,3,5], goal = 6
Êä³ö£º0
½âÊÍ£ºÑ¡ÔñÕû¸öÊý×é×÷Ϊѡ³öµÄ×ÓÐòÁУ¬ÔªËغÍΪ 6 ¡£
×ÓÐòÁкÍÓëÄ¿±êÖµÏàµÈ£¬ËùÒÔ¾ø¶Ô²îΪ 0 ¡£
ʾÀý 2£º

ÊäÈ룺nums = [7,-9,15,-2], goal = -5
Êä³ö£º1
½âÊÍ£ºÑ¡³ö×ÓÐòÁÐ [7,-9,-2] £¬ÔªËغÍΪ -4 ¡£
¾ø¶Ô²îΪ abs(-4 - (-5)) = abs(1) = 1 £¬ÊÇ¿ÉÄܵÄ×îСֵ¡£
ʾÀý 3£º

ÊäÈ룺nums = [1,2,3], goal = -7
Êä³ö£º7
?

Ìáʾ£º

1 <= nums.length <= 40
-10^7 <= nums[i] <= 10^7
-10^9 <= goal <= 10^9

˼·

´ÓÊý¾Ý·¶Î§¿ÉÒÔ¿´³ö£¬ÕâµÀÌâ´ó¸ÅÂÊÊÇÒ»¸ö $O(2^m)$ ʱ¼ä¸´ÔӶȵĽⷨ£¬ÆäÖÐ m ÊÇ nums.length µÄÒ»°ë¡£

Ϊʲô£¿Ê×ÏÈÈç¹ûÌâÄ¿Êý×鳤¶ÈÏÞÖÆΪСÓÚµÈÓÚ 20£¬ÄÇô´ó¸ÅÂÊÊÇÒ»¸ö $O(2^n)$ µÄ½â·¨¡£

Èç¹ûÕâ¸öÒ²²»ÖªµÀ£¬½¨Òé¿´Ò»ÏÂÕâƪÎÄÕ https://lucifer.ren/blog/2020... ÁíÍâÎÒµÄË¢Ìâ²å¼þ leetcode-cheatsheet Ò²¸ø³öÁËʱ¼ä¸´ÔÓ¶ÈËÙ²é±í¹©´ó¼Ò²Î¿¼¡£

½« 40 ¿³°ëÇ¡ºÃ¾Í¿ÉÒÔ AC ÁË¡£Êµ¼ÊÉÏ£¬40 Õâ¸öÊý×Ö¾ÍÊÇÒ»¸öÇ¿ÓÐÁ¦µÄÐźš£

»Øµ½ÌâÄ¿ÖС£ÎÒÃÇ¿ÉÒÔÓÃÒ»¸ö¶þ½øÖÆλ±íʾԭÊý×é nums µÄÒ»¸ö×Ó¼¯£¬ÕâÑùÓÃÒ»¸ö³¤¶ÈΪ $2^n$ µÄÊý×é¾Í¿ÉÒÔÃèÊö nums µÄËùÓÐ×Ó¼¯ÁË£¬Õâ¾ÍÊÇ״̬ѹËõ¡£Ò»°ãÌâÄ¿Êý¾Ý·¶Î§ÊÇ <= 20 ¶¼Ó¦¸ÃÏëµ½¡£

ÕâÀï 40 ÕÛ°ë¾ÍÊÇ 20 ÁË¡£

Èç¹û²»ÊìϤ״̬ѹËõ£¬¿ÉÒÔ¿´ÏÂÎÒµÄÕâƪÎÄÕ ״ѹ DP ÊÇʲô£¿ÕâƪÌâ½â´øÄãÈëÃÅ

½ÓÏÂÀ´£¬ÎÒÃÇʹÓö¯Ì¬¹æ»®Çó³öËùÓеÄ×Ó¼¯ºÍ¡£

ÕâÒ²²»ÄÑÇó³ö£¬×ªÒÆ·½³ÌΪ £º dp[(1 << i) + j] = dp[j] + A[i]£¬ÆäÖÐ j Ϊ i µÄ×Ó¼¯£¬i ºÍ j ¶¼ÊÇÊý×Ö£¬i ºÍ j µÄ¶þ½øÖƱíʾµÄÊÇ nums µÄÑ¡ÔñÇé¿ö¡£

¶¯Ì¬¹æ»®Çó×Ó¼¯ºÍ´úÂëÈçÏ£º

def combine_sum(A):
    n = len(A)
    dp = [0] * (1 << n)
    for i in range(n):
        for j in range(1 << i):
            dp[(1 << i) + j] = dp[j] + A[i]
    return dp

½ÓÏÂÀ´£¬ÎÒÃǽ« nums ƽ·ÖΪÁ½²¿·Ö£¬·Ö±ð¼ÆËã×Ó¼¯ºÍ£º

n = len(nums)
c1 = combine_sum(nums[: n // 2])
c2 = combine_sum(nums[n // 2 :])

ÆäÖÐ c1 ¾ÍÊÇÇ°°ë²¿·ÖÊý×éµÄ×Ó¼¯ºÍ£¬c2 ¾ÍÊǺó°ë²¿·ÖµÄ×Ó¼¯ºÍ¡£

½ÓÏÂÀ´ÎÊÌâת»¯Îª£ºÔÚÁ½¸öÊý×é c1 ºÍ c2ÖÐÕÒÁ½¸öÊý£¬ÆäºÍ×î½Ó½ü goal¡£¶øÕâÊÇÒ»¸ö·Ç³£¾­µäµÄË«Ö¸ÕëÎÊÌ⣬Âß¼­ÀàËÆÁ½ÊýºÍ¡£

Ö»²»¹ýÁ½ÊýºÍÊÇÒ»¸öÊý×éÌôÁ½¸öÊý£¬ÕâÀïÊÇÁ½¸öÊý×é·Ö±ðÌôÒ»¸öÊý°ÕÁË¡£

ÕâÀïÆäʵֻÐèÒªÒ»¸öÖ¸ÕëÖ¸ÏòÒ»¸öÊý×éµÄÍ·£¬ÁíÍâÒ»¸öÖ¸ÏòÁíÍâÒ»¸öÊý×éµÄβ¼´¿É¡£

´úÂë²»ÄÑд³ö£º

def combine_closest(c1, c2):
    # ÏÈÅÅÐòÒÔ±ãʹÓÃË«Ö¸Õë
    c1.sort()
    c2.sort()
    ans = float("inf")
    i, j = 0, len(c2) - 1
    while i < len(c1) and j >= 0:
        _sum = c1[i] + c2[j]
        ans = min(ans, abs(_sum - goal))
        if _sum > goal:
            j -= 1
        elif _sum < goal:
            i += 1
        else:
            return 0
    return ans

ÉÏÃæÕâ¸ö´úÂë²»¶®µÄ¶à¿´¿´Á½ÊýºÍ¡£

´úÂë

´úÂëÖ§³Ö£ºPython3

Python3 Code:

class Solution:
    def minAbsDifference(self, nums: List[int], goal: int) -> int:
        def combine_sum(A):
            n = len(A)
            dp = [0] * (1 << n)
            for i in range(n):
                for j in range(1 << i):
                    dp[(1 << i) + j] = dp[j] + A[i]
            return dp

        def combine_closest(c1, c2):
            c1.sort()
            c2.sort()
            ans = float("inf")
            i, j = 0, len(c2) - 1
            while i < len(c1) and j >= 0:
                _sum = c1[i] + c2[j]
                ans = min(ans, abs(_sum - goal))
                if _sum > goal:
                    j -= 1
                elif _sum < goal:
                    i += 1
                else:
                    return 0
            return ans

        n = len(nums)
        return combine_closest(combine_sum(nums[: n // 2]), combine_sum(nums[n // 2 :]))

¸´ÔӶȷÖÎö

Áî n ΪÊý×鳤¶È, m Ϊ $\frac{n}{2}$¡£

  • ʱ¼ä¸´ÔӶȣº$O(m*2^m)$
  • ¿Õ¼ä¸´ÔӶȣº$O(2^m)$

Ïà¹ØÌâÄ¿ÍƼö£º

ÕâµÀÌâºÍË«ÏòËÑË÷ÓÐʲô¹ØϵÄØ£¿

»ØһϿªÍ·ÎҵĻ°£ºÓÐʱºòÎÊÌâ¹æÄ£ºÜ´ó£¬Ö±½ÓËÑË÷»á³¬Ê±¡£´Ëʱ¿ÉÒÔ¿¼ÂÇ´ÓÆðµãËÑË÷µ½ÎÊÌâ¹æÄ£µÄÒ»°ë¡£È»ºó½«´Ë¹ý³ÌÖвúÉúµÄ״̬´æÆðÀ´¡£½ÓÏÂÀ´Ä¿±êת»¯ÎªÔÚ´æ´¢µÄÖмä״̬ÖÐÑ°ÕÒÂú×ãÌõ¼þµÄ״̬¡£½ø¶ø´ïµ½½µµÍʱ¼ä¸´ÔӶȵÄЧ¹û¡£

¶ÔÓ¦ÕâµÀÌ⣬ÎÒÃÇÈç¹ûÖ±½Ó±©Á¦ËÑË÷¡£ÄǾÍÊÇö¾ÙËùÓÐ×Ó¼¯ºÍ£¬È»ºóÕÒµ½ºÍ goal ×î½Ó½üµÄ£¬Ë¼Â·¼òµ¥Ö±½Ó¡£¿ÉÊÇÕâÑù»á³¬Ê±£¬ÄÇô¾ÍËÑË÷µ½Ò»°ë£¬ È»ºó½«×´Ì¬´æÆðÀ´£¨¶ÔÓ¦ÕâµÀÌâ¾ÍÊÇ´æµ½ÁË dp Êý×飩¡£½ÓÏÂÀ´ÎÊÌâת»¯ÎªÁ½¸ö dp Êý×éµÄÔËËã¡£¸ÃËã·¨£¬±¾ÖÊÉÏÊǽ«Î»ÓÚÖ¸ÊýλµÄ³£ÊýÏîŲ¶¯µ½ÁËϵÊýλ¡£ÕâÊÇÒ»ÖÖ³£¼ûµÄË«ÏòËÑË÷£¬ÎÒ¹ÃÇÒ³ÆΪ DFS µÄË«ÏòËÑË÷¡£Ä¿µÄÊÇΪÁ˺ͺóÃæµÄ BFS Ë«ÏòËÑË÷½øÐÐÇø·Ö¡£

BFS

BFS Ò²ÊÇͼÂÛÖÐËã·¨µÄÒ»ÖÖ¡£²»Í¬ÓÚ DFS£¬ BFS ²ÉÓúáÏòËÑË÷µÄ·½Ê½£¬´Ó³õʼ״̬һ²ã²ãÕ¹¿ªÖ±µ½Ä¿±ê״̬£¬ÔÚÊý¾Ý½á¹¹ÉÏͨ³£²ÉÓöÓÁнṹ¡£

¾ßÌåµØ£¬ÎÒÃDz»¶Ï´Ó¶ÓÍ·È¡³ö״̬£¬È»ºó½«´Ë״̬¶ÔÓ¦µÄ¾ö²ß²úÉúµÄËùÓÐеÄ״̬ÍÆÈë¶Ó⣬Öظ´ÒÔÉϹý³ÌÖ±ÖÁ¶ÓÁÐΪ¿Õ¼´¿É¡£

×¢ÒâÕâÀïÓÐÁ½¸ö¹Ø¼üµã£º

  1. ½«´Ë״̬¶ÔÓ¦µÄ¾ö²ß¡£ ʵ¼ÊÉÏÕâ¾ä»°Ö¸µÄ¾ÍÊÇ״̬¿Õ¼äÖеÄͼµÄ±ß£¬¶ø²»¹ÜÊÇ DFS ºÍ BFS ±ß¶¼ÊÇÈ·¶¨µÄ¡£Ò²¾ÍÊÇ˵²»¹ÜÊÇ DFS »¹ÊÇ BFS Õâ¸ö¾ö²ß¶¼ÊÇÒ»ÑùµÄ¡£²»Í¬µÄÊÇʲô£¿²»Í¬µÄÊǽøÐоö²ßµÄ·½Ïò²»Í¬¡£
  2. ËùÓÐеÄ״̬ÍÆÈë¶Óβ¡£ÉÏÃæ˵ BFS ºÍ DFS ÊǽøÐоö²ßµÄ·½Ïò²»Í¬¡£Õâ¾Í¿ÉÒÔͨ¹ýÕâ¸ö¶¯×÷ÌåÏÖ³öÀ´¡£ÓÉÓÚÖ±½Ó½«ËùÓÐ״̬¿Õ¼äÖеĵ±Ç°µãµÄÁڱ߷ŵ½¶Óβ¡£ÓɶÓÁеÄÏȽøÏȳöµÄÌØÐÔ£¬µ±Ç°µãµÄÁڱ߷ÃÎÊÍê³É֮ǰÊDz»»á¼ÌÐøÏòÍâÀ©Õ¹µÄ¡£ÕâÒ»µã´ó¼Ò¿ÉÒÔºÍ DFS ½øÐжԱȡ£

×î¼òµ¥µÄ BFS ÿ´ÎÀ©Õ¹ÐµÄ״̬¾ÍÔö¼ÓÒ»²½£¬Í¨¹ýÕâÑùÒ»²½²½±Æ½ü´ð°¸¡£ÆäʵҲ¾ÍµÈ¼ÛÓÚÔÚÒ»¸öȨֵΪ 1 µÄͼÉϽøÐÐ BFS¡£ÓÉÓÚ¶ÓÁеĵ¥µ÷ÐԺͶþÖµÐÔ£¬µ±µÚÒ»´ÎÈ¡³öÄ¿±ê״̬ʱ¾ÍÊÇ×îÉٵIJ½Êý¡£»ùÓÚÕâ¸öÌØÐÔ£¬BFS ÊʺÏÇó½âһЩ×îÉÙ²Ù×÷µÄÌâÄ¿¡£

¹ØÓÚµ¥µ÷ÐԺͶþÖµÐÔ£¬ÎÒ»áÔÚºóÃæµÄ BFS ºÍ DFS µÄ¶Ô±ÈÄÇ¿é½øÐн²½â¡£

Ç°Ãæ DFS ²¿·ÖÌáµ½Á˲»¹ÜÊÇʲôËÑË÷¶¼ÐèÒª¼Ç¼ºÍά»¤×´Ì¬£¬ÆäÖÐÒ»¸ö¾ÍÊǽڵã·ÃÎÊ״̬ÒÔ·ÀÖ¹»·µÄ²úÉú¡£¶ø BFS ÖÐÎÒÃdz£³£ÓÃÀ´ÇóµãµÄ×î¶Ì¾àÀë¡£ÖµµÃ×¢ÒâµÄÊÇ£¬ÓÐʱºòÎÒÃÇ»áʹÓÃÒ»¸ö¹þÏ£±í dist À´¼Ç¼´ÓÔ´µãµ½Í¼ÖÐÆäËûµãµÄ¾àÀë¡£Õâ¸ö dist Ò²¿ÉÒԳ䵱·ÀÖ¹»·²úÉúµÄ¹¦ÄÜ£¬ÕâÊÇÒòΪµÚÒ»´Îµ½´ïÒ»¸öµãºóÔٴε½´ï´ËµãµÄ¾àÀëÒ»¶¨±ÈµÚÒ»´Îµ½´ï´ó£¬ÀûÓÃÕâµã¾Í¿ÉÖªµÀÊÇ·ñÊǵÚÒ»´Î·ÃÎÊÁË¡£

Ëã·¨Á÷³Ì

  1. Ê×ÏȽ«¸ù½Úµã·ÅÈë¶ÓÁÐÖС£
  2. ´Ó¶ÓÁÐÖÐÈ¡³öµÚÒ»¸ö½Úµã£¬²¢¼ìÑéËüÊÇ·ñΪĿ±ê¡£

    • Èç¹ûÕÒµ½Ä¿±ê£¬Ôò½áÊøËÑË÷²¢»Ø´«½á¹û¡£
    • ·ñÔò½«ËüËùÓÐÉÐδ¼ìÑé¹ýµÄÖ±½Ó×Ó½Úµã¼ÓÈë¶ÓÁÐÖС£
  3. Èô¶ÓÁÐΪ¿Õ£¬±íʾÕûÕÅͼ¶¼¼ì²é¹ýÁË¡ª¡ªÒ༴ͼÖÐûÓÐÓûËÑË÷µÄÄ¿±ê¡£½áÊøËÑË÷²¢»Ø´«¡°ÕÒ²»µ½Ä¿±ê¡±¡£
  4. Öظ´²½Öè 2¡£

Ë㷨ģ°å

const visited = {}
function bfs() {
    let q = new Queue()
    q.push(³õʼ״̬)
    while(q.length) {
        let i = q.pop()
        if (visited[i]) continue
        for (iµÄ¿ÉµÖ´ï״̬j) {
            if (j ºÏ·¨) {
                q.push(j)
            }
        }
    }
    // ÕÒµ½ËùÓкϷ¨½â
}

³£Óü¼ÇÉ

Ë«ÏòËÑË÷
ÌâÄ¿µØÖ·(126. µ¥´Ê½ÓÁú II)

https://leetcode-cn.com/probl...

ÌâÄ¿ÃèÊö
°´×Öµä?wordList Íê³É´Óµ¥´Ê beginWord µ½µ¥´Ê endWord ת»¯£¬Ò»¸ö±íʾ´Ë¹ý³ÌµÄ ת»»ÐòÁÐ ÊÇÐÎʽÉÏÏñ beginWord -> s1 -> s2 -> ... -> sk ÕâÑùµÄµ¥´ÊÐòÁУ¬²¢Âú×㣺

ÿ¶ÔÏàÁڵĵ¥´ÊÖ®¼ä½öÓе¥¸ö×Öĸ²»Í¬¡£
ת»»¹ý³ÌÖеÄÿ¸öµ¥´Ê si£¨1 <= i <= k£©±ØÐëÊÇ×Öµä?wordList Öеĵ¥´Ê¡£×¢Ò⣬beginWord ²»±ØÊÇ×Öµä wordList Öеĵ¥´Ê¡£
sk == endWord

¸øÄãÁ½¸öµ¥´Ê beginWord ºÍ endWord £¬ÒÔ¼°Ò»¸ö×Öµä wordList ¡£ÇëÄãÕÒ³ö²¢·µ»ØËùÓÐ´Ó beginWord µ½ endWord µÄ ×î¶Ìת»»ÐòÁÐ £¬Èç¹û²»´æÔÚÕâÑùµÄת»»ÐòÁУ¬·µ»ØÒ»¸ö¿ÕÁÐ±í¡£Ã¿¸öÐòÁж¼Ó¦¸ÃÒÔµ¥´ÊÁбí [beginWord, s1, s2, ..., sk] µÄÐÎʽ·µ»Ø¡£

?

ʾÀý 1£º

ÊäÈ룺beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
Êä³ö£º[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]]
½âÊÍ£º´æÔÚ 2 ÖÖ×î¶ÌµÄת»»ÐòÁУº
"hit" -> "hot" -> "dot" -> "dog" -> "cog"
"hit" -> "hot" -> "lot" -> "log" -> "cog"


ʾÀý 2£º

ÊäÈ룺beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log"]
Êä³ö£º[]
½âÊÍ£ºendWord "cog" ²»ÔÚ×Öµä wordList ÖУ¬ËùÒÔ²»´æÔÚ·ûºÏÒªÇóµÄת»»ÐòÁС£


?

Ìáʾ£º

1 <= beginWord.length <= 7
endWord.length == beginWord.length
1 <= wordList.length <= 5000
wordList[i].length == beginWord.length
beginWord¡¢endWord ºÍ wordList[i] ÓÉСдӢÎÄ×Öĸ×é³É
beginWord != endWord
wordList ÖеÄËùÓе¥´Ê »¥²»Ïàͬ
˼·

ÕâµÀÌâ¾ÍÊÇÎÒÃÇÈÕ³£ÍæµÄ³ÉÓï½ÓÁúÓÎÏ·¡£¼´ÈÃÄã´Ó beginWord ¿ªÊ¼£¬ ½ÓÁúµÄ endWord¡£ÈÃÄãÕÒµ½×î¶ÌµÄ½ÓÁú·½Ê½£¬Èç¹ûÓжà¸ö£¬ÔòÈ«²¿·µ»Ø¡£

²»Í¬ÓÚ³ÉÓï½ÓÁúµÄ×ÖÊ×½Ó×Öβ¡£ÕâÖÖ½ÓÁúÐèÒªµÄÊÇÏÂÒ»¸öµ¥´ÊºÍÉÏÒ»¸öµ¥´Ê½öÓÐÒ»¸öµ¥´Ê²»Í¬¡£

ÎÒÃÇ¿ÉÒÔ¶ÔÎÊÌâ½øÐгéÏ󣺼´¹¹½¨Ò»¸ö´óСΪ n µÄͼ£¬Í¼ÖеÄÿһ¸öµã±íʾһ¸öµ¥´Ê£¬ÎÒÃǵÄÄ¿±êÊÇÕÒµ½Ò»Ìõ´Ó½Úµã beginWord µ½½Úµã endWord µÄÒ»Ìõ×î¶Ì·¾¶¡£

ÕâÊÇÒ»¸ö²»ÕÛ²»¿ÛµÄͼÉÏ BFS µÄÌâÄ¿¡£Ì×ÓÃÉÏÃæµÄ½âÌâÄ£°å¿ÉÒÔÇáËɽâ¾ö¡£Î¨Ò»ÐèҪעÒâµÄÊÇÈçºÎ¹¹½¨Í¼¡£¸ü½øÒ»²½Ëµ¾ÍÊÇÈçºÎ¹¹½¨±ß¡£

ÓÉÌâÄ¿ÐÅÏ¢µÄת»»¹æÔò£ºÃ¿¶ÔÏàÁڵĵ¥´ÊÖ®¼ä½öÓе¥¸ö×Öĸ²»Í¬¡£²»ÄÑÖªµÀ£¬Èç¹ûÁ½¸öµ¥´ÊµÄ½öÓе¥¸ö×Öĸ²»Í¬ £¬¾Í˵Ã÷Á½ÕßÖ®¼äÓÐÒ»Ìõ±ß¡£

Ã÷°×ÁËÕâÒ»µã£¬ÎÒÃǾͿÉÒÔ¹¹½¨ÁÚ½Ó¾ØÕóÁË¡£

ºËÐÄ´úÂ룺

neighbors = collections.defaultdict(list)
for word in wordList:
    for i in range(len(word)):
        neighbors[word[:i] + "*" + word[i + 1 :]].append(word)

¹¹½¨ºÃÁËͼ¡£ BFS Ê£ÏÂÒª×öµÄ¾ÍÊÇÃ÷È·ÆðµãºÍÖÕµã¾ÍºÃÁË¡£¶ÔÓÚÕâµÀÌâÀ´Ëµ£¬ÆðµãÊÇ beginWord£¬ÖÕµãÊÇ endWord¡£

ÄÇÎÒÃǾͿÉÒÔ½« beginWord Èë¶Ó¡£²»¶ÏÔÚͼÉÏ×ö BFS£¬Ö±µ½µÚÒ»´ÎÓöµ½ endWord ¾ÍºÃÁË¡£

Ì×ÓÃÉÏÃæµÄ BFS Ä£°å£¬²»ÄÑд³öÈçÏ´úÂë:

ÕâÀïÎÒÓÃÁË cost ¶ø²»ÊÇ visitd£¬Ä¿µÄÊÇΪÁËÈôó¼Ò¼ûʶ¶àÖÖд·¨¡£ÏÂÃæµÄÓÅ»¯½â·¨»áʹÓà visited À´¼Ç¼¡£

class Solution:
    def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[List[str]]:
        cost = collections.defaultdict(lambda: float("inf"))
        cost[beginWord] = 0
        neighbors = collections.defaultdict(list)
        ans = []

        for word in wordList:
            for i in range(len(word)):
                neighbors[word[:i] + "*" + word[i + 1 :]].append(word)
        q = collections.deque([[beginWord]])

        while q:
            path = q.popleft()
            cur = path[-1]
            if cur == endWord:
                ans.append(path.copy())
            else:
                for i in range(len(cur)):
                    for neighbor in neighbors[cur[:i] + "*" + cur[i + 1 :]]:
                        if cost[cur] + 1 <= cost[neighbor]:
                            q.append(path + [neighbor])
                            cost[neighbor] = cost[cur] + 1
        return ans

µ±ÖÕµã¿ÉÒÔÄæÏòËÑË÷µÄʱºò£¬ÎÒÃÇÒ²¿ÉÒÔ³¢ÊÔË«Ïò BFS¡£¸ü±¾ÖÊÒ»µã¾ÍÊÇ£ºÈç¹ûÄã¹¹½¨µÄ״̬¿Õ¼äµÄ±ßÊÇË«ÏòµÄ£¬ÄÇô¾Í¿ÉÒÔʹÓÃË«Ïò BFS¡£

ºÍ DFS µÄË«ÏòËÑË÷˼ÏëÊÇÀàËƵġ£ÎÒÃÇÖ»ÐèҪʹÓÃÁ½¸ö¶ÓÁзֱð´æ´¢ÖÐÆðµãºÍÖÕµã½øÐÐÀ©Õ¹µÄ½Úµã£¨ÎÒ³ÆÆäΪÆðµã¼¯ÓëÖյ㼯£©¼´¿É¡£µ±ÆðµãºÍÖÕµãÔÚijһʱ¿Ì½»»ãÁË£¬ËµÃ÷ÕÒµ½ÁËÒ»¸ö´ÓÆðµãµ½ÖÕµãµÄ·¾¶£¬Æä·¾¶³¤¶È¾ÍÊÇÁ½¸ö¶ÓÁÐÀ©Õ¹µÄ·¾¶³¤¶ÈºÍ¡£

ÒÔÉϾÍÊÇË«ÏòËÑË÷µÄ´óÌå˼·¡£ÓÃͼÀ´±íʾ¾ÍÊÇÕâÑùµÄ£º

ÈçÉÏͼ£¬ÎÒÃÇ´ÓÆðµãºÍÖص㣨A ºÍ Z£©·Ö±ð¿ªÊ¼ËÑË÷£¬Èç¹ûÆðµãµÄÀ©Õ¹×´Ì¬ºÍÖÕµãµÄÀ©Õ¹×´Ì¬Öصþ£¨±¾ÖÊÉϾÍÊǶÓÁÐÖеÄÔªËØÖصþÁË£©£¬ÄÇôÎÒÃǾÍÖªµÀÁËÒ»¸ö´Ó½Úµãµ½ÖÕµãµÄ×î¶Ì·¾¶¡£

¶¯Í¼ÑÝʾ£º

Ë«ÏòËÑË÷.svg

¿´µ½ÕâÀïÓбØÒªÔÝͣһϲ弸¾ä»°¡£


Ϊʲô˫ÏòËÑË÷¾Í¿ìÁË£¿Ê²Ã´Çé¿ö¶¼»á¸ü¿ìô£¿ÄÇΪʲô²»¶¼ÓÃË«ÏòËÑË÷£¿ÓÐÄÄЩʹÓÃÌõ¼þ£¿

ÎÒÃÇÒ»¸ö¸ö»Ø´ð¡£

  • Ϊʲô˫ÏòËÑË÷¸ü¿ìÁË£¿Í¨¹ýÉÏÃæµÄͼÎÒÃÇ·¢ÏÖͨ³£¸Õ¿ªÊ¼µÄʱºò±ß±È½ÏÉÙ£¬¶ÓÁÐÖеÄÊý¾ÝÒ²±È½ÏÉÙ¡£¶øËæ×ÅËÑË÷µÄ½øÐУ¬ËÑË÷Ê÷Ô½À´Ô½´ó£¬ ¶ÓÁÐÖеĽڵãËæÖ®Ôö¶à¡£ºÍÉÏÃæË«ÏòËÑË÷ÀàËÆ£¬ÕâÖÖÔö³¤ËٶȺܶàÇé¿öÏÂÊÇÖ¸Êý¼¶±ðµÄ£¬¶øË«ÏòËÑË÷¿ÉÒÔ½«Ö¸ÊýµÄ³£ÏµÊýÒƶ¯µ½¶àÏîʽϵÊý¡£Èç¹û²»Ê¹ÓÃË«ÏòËÑË÷ÄÇôËÑË÷Ê÷´ó¸ÅÊÇÕâÑùµÄ£º

¿ÉÒÔ¿´³öËÑË÷Ê÷´óÁ˺ܶ࣬ÒÔÖÁÓںܶàµãÎÒ¶¼»­²»Ï£¬Ö»ºÃÓà ¡±¡£¡£¡£¡° À´±íʾ¡£

  • ʲôÇé¿öϸü¿ì£¿Ïà±ÈÓÚµ¥ÏòËÑË÷£¬Ë«ÏòËÑË÷ͨ³£¸ü¿ì¡£µ±È»Ò²ÓÐÀýÍ⣬¾Ù¸ö¼«¶ËµÄÀý×Ó£¬¼ÙÈç´ÓÆðµãµ½ÖÕµãÖ»ÒªÒ»Ìõ·¾¶£¬ÄÇôÎÞÂÛʹÓõ¥ÏòËÑË÷»¹ÊÇË«ÏòËÑË÷½á¹û¶¼ÊÇÒ»Ñù¡£

ÈçͼʹÓõ¥ÏòËÑË÷»¹ÊÇË«ÏòËÑË÷¶¼ÊÇÒ»ÑùµÄ¡£

  • Ϊʲô²»¶¼ÓÃË«ÏòËÑË÷£¿Êµ¼ÊÉÏ×öÌâÖУ¬ÎÒ½¨Òé´ó¼Ò¾¡Á¿Ê¹Óõ¥ÏòËÑË÷£¬ÒòΪдÆðÀ´¸ü½Úµã£¬²¢ÇÒ´ó¶àÊý¶¼¿ÉÒÔͨ¹ýËùÓеIJâÊÔÓÃÀý¡£³ý·ÇÄãÔ¤¹Àµ½¿ÉÄܻᳬʱ»òÕßÌá½»ºó·¢ÏÖ³¬Ê±µÄʱºòÔÙ³¢ÊÔʹÓÃË«ÏòËÑË÷¡£
  • ÓÐÄÄЩʹÓÃÌõ¼þ£¿ÕýÈçÇ°ÃæËù˵£º¡±ÖÕµã¿ÉÒÔÄæÏòËÑË÷µÄʱºò£¬¿ÉÒÔ³¢ÊÔË«Ïò BFS¡£¸ü±¾ÖÊÒ»µã¾ÍÊÇ£ºÈç¹ûÄã¹¹½¨µÄ״̬¿Õ¼äµÄ±ßÊÇË«ÏòµÄ£¬ÄÇô¾Í¿ÉÒÔʹÓÃË«Ïò BFS¡£¡°

ÈÃÎÒÃǼÌÐø»Øµ½ÕâµÀÌ⡣ΪÁËÄܹ»ÅжÏÁ½ÕßÊÇ·ñ½»»ã£¬ÎÒÃÇ¿ÉÒÔʹÓÃÁ½¸ö hashSet ·Ö±ð´æ´¢Æðµã¼¯ºÏÖյ㼯¡£µ±Ò»¸ö½Úµã¼È³öÏÖÆðµã¼¯ÓÖ³öÏÖÔÚÖյ㼯£¬ÄǾÍ˵Ã÷³öÏÖÁ˽»»ã¡£

ΪÁ˽ÚÊ¡´úÂëÁ¿ÒÔ¼°¿Õ¼äÏûºÄ£¬ÎÒûÓÐʹÓÃÉÏÃæµÄ¶ÓÁУ¬¶øÊÇÖ±½ÓʹÓÃÁ˹þÏ£±íÀ´´úÌæ¶ÓÁС£ÕâÖÖ×ö·¨¿ÉÐеĹؼüÈÔÈ»ÊÇÉÏÃæÌáµ½µÄ¶ÓÁеĶþÖµÐԺ͵¥µ÷ÐÔ¡£

ÓÉÓÚÐÂÒ»Âֵijö¶ÓÁÐÇ°£¬¶ÓÁÐÖеÄȨֵ¶¼ÊÇÏàͬµÄ¡£Òò´Ë´Ó×óµ½ÓÒ±éÀú»òÕß´ÓÓÒµ½×ó±éÀú£¬ÉõÖÁÊÇÈÎÒâ˳Ðò±éÀú¶¼ÊÇÎÞËùνµÄ¡££¨ºÜ¶àÌⶼÎÞËùν£©Òò´ËʹÓùþÏ£±í¶ø²»ÊǶÓÁÐÒ²ÊÇ¿ÉÒԵġ£ÕâµãÐèÒªÒýÆð´ó¼ÒµÄ×¢Ò⡣ϣÍû´ó¼Ò¶Ô BFS µÄ±¾ÖÊÓиüÉîµÄÀí½â¡£

ÄÇÎÒÃÇÊDz»ÊDz»ÐèÒª¶ÓÁУ¬¾ÍÓùþÏ£±í£¬¹þÏ£¼¯ºÏɶµÄ´æ¾ÍÐÐÁË£¿·ÇÒ²£¡ÎÒ»áÔÚË«¶Ë¶ÓÁв¿·ÖΪ´ó¼Ò½ÒÏþ¡£

ÕâµÀÌâµÄ¾ßÌåËã·¨£º

  • ¶¨ÒåÁ½¸ö¶ÓÁУºq1 ºÍ q2 £¬·Ö±ð´ÓÆðµãºÍÖÕµã½øÐÐËÑË÷¡£
  • ¹¹½¨ÁÚ½Ó¾ØÕó
  • ÿ´Î¶¼³¢ÊÔ´Ó q1 ºÍ q2 ÖеĽÏСµÄ½øÐÐÀ©Õ¹¡£ÕâÑù¿ÉÒÔ´ïµ½¼ôÖ¦µÄЧ¹û¡£

  • Èç¹û q1 ºÍ q2 ½»»ãÁË£¬Ôò½«Á½Õߵķ¾¶Æ´½ÓÆðÀ´¼´¿É¡£
´úÂë
  • ÓïÑÔÖ§³Ö£ºPython3

Python3 Code:

 class Solution:
    def findLadders(self, beginWord: str, endWord: str, wordList: list) -> list:
        #  ¼ôÖ¦ 1
        if endWord not in wordList: return []
        ans = []
        visited = set()
        q1, q2 = {beginWord: [[beginWord]]}, {endWord: [[endWord]]}
        steps = 0
        # Ô¤´¦Àí£¬¿Õ¼ä»»Ê±¼ä
        neighbors = collections.defaultdict(list)
        for word in wordList:
            for i in range(len(word)):
                neighbors[word[:i] + "*" + word[i + 1 :]].append(word)
        while q1:
            # ¼ôÖ¦ 2
            if len(q1) > len(q2):
                q1, q2 = q2, q1
            nxt = collections.defaultdict(list)
            for _ in range(len(q1)):
                word, paths = q1.popitem()
                visited.add(word)
                for i in range(len(word)):
                    for neighbor in neighbors[word[:i] + "*" + word[i + 1 :]]:
                        if neighbor in q2:
                            # ´Ó beginWord À©Õ¹¹ýÀ´µÄ
                            if paths[0][0] == beginWord:
                                ans += [path1 + path2[::-1] for path1 in paths for path2 in q2[neighbor]]
                            # ´Ó endWord À©Õ¹¹ýÀ´µÄ
                            else:
                                ans += [path2 + path1[::-1] for path1 in paths for path2 in q2[neighbor]]
                        if neighbor in wordList and neighbor not in visited:
                            nxt[neighbor] += [path + [neighbor] for path in paths]
            steps += 1
            # ¼ôÖ¦ 3
            if ans and steps + 2 > len(ans[0]):
                break
            q1 = nxt
        return ans
×ܽá

ÎÒÏëͨ¹ýÕâµÀÌâ¸ø´ó¼Ò´«µÝµÄ֪ʶµãºÜ¶à¡£·Ö±ðÊÇ£º

  • ¶ÓÁв»Ò»¶¨·ÇµÃÊdz£¹æµÄ¶ÓÁУ¬Ò²¿ÉÒÔÊǹþÏ£±íµÈ¡£²»¹ýijЩÇé¿ö±ØÐëÊÇË«¶Ë¶ÓÁУ¬Õâ¸öµÈ»á½²Ë«¶Ë¶ÓÁиø´ó¼Ò½²¡£
  • Ë«Ïò BFS ÊÇÖ»ÊʺÏË«Ïòͼ¡£Ò²¾ÍÊÇ˵´ÓÖÕµãÒ²ÍùÇ°ÍÆ¡£
  • Ë«Ïò BFS ´Ó½ÏÉÙ״̬µÄÒ»¶Ë½øÐÐÀ©Õ¹¿ÉÒÔÆðµ½¼ôÖ¦µÄЧ¹û
  • visitd ºÍ dist/cost ¶¼¿ÉÒÔÆ𵽼Ǽµã·ÃÎÊÇé¿öÒÔ·ÀÖ¹»·µÄ²úÉúµÄ×÷Óᣲ»¹ý dist µÄ×÷Óøü¶à£¬ÏàÓ¦¿Õ¼äÕ¼ÓÃÒ²¸ü´ó¡£
Ë«¶Ë¶ÓÁÐ

ÉÏÃæÌáµ½ÁË BFS ±¾ÖÊÉÏ¿ÉÒÔ¿´×öÊÇÔÚÒ»¸ö±ßȨֵΪ 1 µÄͼÉϽøÐбéÀú¡£Êµ¼ÊÉÏ£¬ÎÒÃÇ¿ÉÒÔ½øÐÐÒ»¸ö¼òµ¥µÄÀ©Õ¹¡£Èç¹ûͼÖбßȨֵ²»È«ÊÇ 1£¬¶øÊÇ 0 ºÍ 1 ÄØ£¿ÕâÑùÆäʵÎÒÃÇÓõ½Ë«¶Ë¶ÓÁС£

Ë«¶Ë¶ÓÁпÉÒÔÔÚÍ·²¿ºÍβ²¿Í¬Ê±½øÐвåÈëºÍɾ³ý£¬¶øÆÕͨµÄ¶ÓÁнöÔÊÐíÔÚÍ·²¿É¾³ý£¬ÔÚβ²¿²åÈë¡£

ʹÓÃË«¶Ë¶ÓÁУ¬µ±Ã¿´ÎÈ¡³öÒ»¸ö״̬µÄʱºò¡£Èç¹ûÎÒÃÇ¿ÉÒÔÎÞ´ú¼ÛµÄ½øÐÐתÒÆ£¬ÄÇô¾Í¿ÉÒÔ½«ÆäÖ±½Ó·ÅÔÚ¶ÓÍ·£¬·ñÔò·ÅÔÚ¶Óβ¡£ÓÉÇ°Ãæ½²µÄ¶ÓÁеĵ¥µ÷ÐԺͶþÖµÐÔ²»ÄѵóöËã·¨µÄÕýÈ·ÐÔ¡£¶øÈç¹û״̬תÒÆÊÇÓдú¼ÛµÄ£¬ÄÇô¾Í½«Æä·Åµ½¶Óβ¼´¿É¡£ÕâÒ²ÊǺܶàÓïÑÔÌṩµÄÄÚÖÃÊý¾Ý½á¹¹ÊÇË«¶Ë¶ÓÁУ¬¶ø²»ÊǶÓÁеÄÔ­ÒòÖ®Ò»¡£

ÈçÏÂͼ£º

ÉÏÃæµÄ¶ÓÁÐÊÇÆÕͨµÄ¶ÓÁС£ ¶øÏÂÃæµÄË«¶Ë¶ÓÁУ¬¿ÉÒÔ¿´³öÎÒÃÇÔÚ¶ÓÍ·²å¶ÓÁËÒ»¸ö B¡£

¶¯Í¼ÑÝʾ£º

Ë«¶Ë¶ÓÁÐ.svg

˼¿¼£ºÈç¹ûͼ¶ÔÓ¦µÄȨֵ²»³ö 0 ºÍ 1£¬¶øÊÇÈÎÒâÕýÕûÊýÄØ£¿

Ç°ÃæÎÒÃÇÌáµ½ÁËÊDz»ÊDz»ÐèÒª¶ÓÁУ¬¾ÍÓùþÏ£±í£¬¹þÏ£¼¯ºÏɶµÄ´æ¾ÍÐÐÁË£¿ ÕâÀïΪ´ó¼Ò½ÒÃØ¡£²»¿ÉÒԵġ£ÒòΪ¹þÏ£±íÎÞ·¨´¦ÀíÕâÀïµÄȨֵΪ 0 µÄÇé¿ö¡£

DFS ºÍ BFS µÄ¶Ô±È

BFS ºÍ DFS ·Ö±ð´¦ÀíʲôÑùµÄÎÊÌ⣿Á½Õß¾¿¾¹ÓÐʲôÑùµÄÇø±ð£¿ÕâЩ¶¼ÖµµÃÎÒÃÇÈÏÕæÑо¿¡£

¼òµ¥À´Ëµ£¬²»¹ÜÊÇ DFS »¹ÊÇ BFS ¶¼ÊǶÔÌâÄ¿¶ÔÓ¦µÄ״̬¿Õ¼ä½øÐÐËÑË÷¡£

¾ßÌåÀ´Ëµ£¬¶þÕßÇø±ðÔÚÓÚ£º

  • DFS ÔÚ·Ö²æµã»áÈÎÑ¡Ò»ÌõÉîÈë½øÈ룬Óöµ½ÖÕµãÔò·µ»Ø£¬Ôٴηµ»Øµ½·Ö²æ¿Úºó³¢ÊÔÏÂÒ»¸öÑ¡Ôñ¡£»ùÓÚ´Ë£¬ÎÒÃÇ¿ÉÒÔÔÚ·¾¶ÉϼǼһЩÊý¾Ý¡£ÓÉ´ËÒ²¿ÉÒÔÑÜÉú³öºÜ¶àÓÐȤµÄ¶«Î÷¡£

ÈçÏÂͼ£¬ÎÒÃDZéÀúµ½ A£¬ÓÐÈý¸öÑ¡Ôñ¡£´ËʱÎÒÃÇ¿ÉÒÔÈÎÒâÑ¡ÔñÒ»Ìõ£¬±ÈÈçÑ¡ÔñÁË B£¬³ÌÐò»á¼ÌÐøÍùϽøÐÐÑ¡Ôñ·ÖÖ§ 2£¬3 ¡£¡£¡£

Èç϶¯Í¼ÑÝʾÁËÒ»¸öµäÐ굀 DFS Á÷³Ì¡£ºóÃæµÄÕ½ڣ¬ÎÒÃÇ»á¸ø´ó¼Ò´øÀ´¸ü¸´ÔÓµÄͼÉÏ DFS¡£

binary-tree-traversal-dfs

  • BFS ÔÚ·Ö²æµã»áÑ¡ÔñËÑË÷µÄ·¾¶¸÷³¢ÊÔÒ»´Î¡£Ê¹ÓöÓÁÐÀ´´æ´¢´ý´¦ÀíµÄÔªËØʱ£¬¶ÓÁÐÖÐ×î¶àÖ»»áÓÐÁ½²ãµÄÔªËØ£¬ÇÒÂú×ãµ¥µ÷ÐÔ£¬¼´Ïàͬ²ãµÄÔªËØÔÚÒ»Æð¡£»ùÓÚÕâ¸öÌصãÓкܶàÓÐȤµÄÓÅ»¯¡£

ÈçÏÂͼ£¬¹ã¶ÈÓÅÏȱéÀú»á½«ËÑË÷µÄÑ¡ÔñÈ«²¿Ñ¡ÔñÒ»±é»á²Å»á½øÈëµ½ÏÂÒ»²ã¡£ºÍÉÏÃæÒ»Ñù£¬ÎÒ¸ø´ó¼Ò±ê×¢Á˳ÌÐòÖ´ÐеÄÒ»ÖÖ¿ÉÄܵÄ˳Ðò¡£

¿ÉÒÔ·¢ÏÖ£¬ºÍÎÒÉÏÃæ˵µÄÒ»Ñù¡£ÓÒ²àµÄ¶ÓÁÐʼÖÕ×î¶àÓÐÁ½²ãµÄ½Úµã£¬²¢ÇÒÏàͬ²ãµÄ×ÜÔÚÒ»Æ𣬻»¾ä»°Ëµ¶ÓÁеÄÔªËØÔÚ²ãÉÏÂú×ãµ¥µ÷ÐÔ¡£

Èç϶¯Í¼ÑÝʾÁËÒ»¸öµäÐ굀 BFS Á÷³Ì¡£ºóÃæµÄÕ½ڣ¬ÎÒÃÇ»á¸ø´ó¼Ò´øÀ´¸ü¸´ÔÓµÄͼÉÏ BFS¡£

binary-tree-traversal-bfs

×ܽá

ÒÔÉϾÍÊÇ¡¶ËÑË÷ƪ£¨ÉÏ£©¡·µÄËùÓÐÄÚÈÝÁË¡£×ܽáÒ»ÏÂËÑË÷ƪµÄ½âÌâ˼·£º

  • ¸ù¾ÝÌâÄ¿ÐÅÏ¢¹¹½¨×´Ì¬¿Õ¼ä£¨Í¼£©¡£
  • ¶Ôͼ½øÐбéÀú£¨BFS »òÕß DFS£©
  • ¼Ç¼ºÍά»¤×´Ì¬¡££¨±ÈÈç visited ά»¤·ÃÎÊÇé¿ö£¬ ¶ÓÁкÍջά»¤×´Ì¬µÄ¾ö²ß·½ÏòµÈµÈ£©

ÎÒÃÇ»¨ÁË´óÁ¿µÄƪ·ù¶Ô BFS ºÍ DFS ½øÐÐÁËÏêϸµÄ½²½â£¬°üÀ¨Á½¸öµÄ¶Ô±È¡£

ºËÐĵãÐèÒª´ó¼Ò×¢Ò⣺

  • DFS ͨ³£¶¼ÊÇÓеÝÍƹØϵµÄ£¬¶øµÝ¹é¹Øϵ¾ÍÊÇͼµÄ±ß¡£¸ù¾ÝµÝ¹é¹Øϵ´ó¼Ò¿ÉÒÔÑ¡ÔñʹÓÃÇ°Ðò±éÀú»òÕߺóÐò±éÀú¡£
  • BFS ÓÉÓÚÆäµ¥µ÷ÐÔ£¬Òò´ËÊʺÏÇó½â×î¶Ì¾àÀëÎÊÌâ¡£
  • ¡£¡£¡£

Ë«ÏòËÑË÷µÄ±¾ÖÊÊǽ«¸´ÔӶȵij£ÊýÏî´ÓÒ»¸öÓ°Ïì½Ï´óµÄλÖ㨱ÈÈçÖ¸Êý룩ÒƵ½ÁËÓ°Ïì½ÏСµÄλÖ㨱ÈÈçϵÊý룩¡£

ËÑË÷ƪ֪ʶµã±È½ÏÃܼ¯£¬Ï£Íû´ó¼Ò¶à¶à×ܽḴϰ¡£

ÏÂÒ»½Ú£¬ÎÒÃǽéÉÜ£º

  • »ØËÝÓë¼ôÖ¦¡£
  • ³£ÓõÄÖ¸±êÓëͳ¼Æ·½·¨¡£¾ßÌå°üÀ¨£º

    1. Ê÷µÄÉî¶ÈÓë×ÓÊ÷´óС
    2. ͼµÄ DFS Ðò
    3. ͼµÄÍØÆËÐò
    4. ͼµÄÁªÍ¨·ÖÁ¿
ϽÚÄÚÈÝ»áÊ×·¢ÔÚ¡¶91 ÌìѧËã·¨¡·¡£Ïë²Î¼ÓµÄ¿ÉÒÔ´ÁÕâÀïÁ˽âÏêÇ飺https://lucifer.ren/blog/2021...

±¾ÎÄת×ÔÍøÂ磬°æȨ¹éÔ­×÷ÕßËùÓУ¬Ô­ÎÄÁ´½Ó£ºhttps://segmentfault.com/a/1190000040105108
±¾Õ¾²¿·ÖÄÚÈÝתÔØÓÚÍøÂ磬°æȨ¹éÔ­×÷ÕßËùÓУ¬×ªÔØ֮ĿµÄÔÚÓÚ´«²¥¸ü¶àÓÅÐã¼¼ÊõÄÚÈÝ£¬ÈçÓÐÇÖȨÇëÁªÏµQQ/΢ÐÅ£º153890879ɾ³ý£¬Ð»Ð»£¡

ÍƼöͼÎÄ

  • ÖÜÅÅÐÐ
  • ÔÂÅÅÐÐ
  • ×ÜÅÅÐÐ

Ëæ»úÍƼö