ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

[C++]LeetCode: 129 Clone Graph (ͼµÄÉ±´ BFS && DFS)(Ò»)
2015-07-20 17:23:18 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºLeetCode: 129 Clone Graph ¿½±´ BFS & DFS

ÌâÄ¿£º

Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.


OJ's undirected graph serialization:

Nodes are labeled uniquely.

We use # as a separator for each node, and , as a separator for node label and each neighbor of the node.

As an example, consider the serialized graph {0,1,2#1,2#2,2}.

The graph has a total of three nodes, and therefore contains three parts as separated by #.

  1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
  2. Second node is labeled as 1. Connect node 1 to node 2.
  3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

    Visually, the graph looks like the following:

           1
          / \
         /   \
        0 --- 2
             / \
             \_/

    ±³¾°ÖªÊ¶£º

    1. É±´ºÍdz¿½±´

    £¨1£© É±´ÊÇÖ¸Ô´¶ÔÏóÓ뿽±´¶ÔÏó»¥Ïà¶ÀÁ¢£¬ÆäÖÐÈκÎÒ»¸ö¶ÔÏóµÄ¸Ä¶¯¶¼²»»á¶ÔÁíÍâÒ»¸ö¶ÔÏóÔì³ÉÓ°Ïì¡£¾Ù¸öÀý×Ó£¬Ò»¸öÈËÃû½ÐÕÅÈý£¬ºóÀ´ÓÃËû¿Ë¡£¨¼ÙÉè·¨ÂÉÔÊÐí£©ÁËÁíÍâÒ»¸öÈË£¬½ÐÀîËÄ£¬²»¹ÜÊÇÕÅÈýȱ¸ì²²ÉÙÍÈ»¹ÊÇÀîËÄȱ¸ì²²ÉÙÍȶ¼²»»áÓ°ÏìÁíÍâÒ»¸öÈË¡£±È½ÏµäÐ͵ľÍÊÇValue£¨Öµ£©¶ÔÏó£¬ÈçÔ¤¶¨ÒåÀàÐÍInt32£¬Double£¬ÒÔ¼°½á¹¹£¨struct£©£¬Ã¶¾Ù£¨Enum£©µÈ¡£

    ¿¼ÂÇÒÔÏÂд·¨

    int source = int.MaxValue;//(1)³õʼ»¯Ô´¶ÔÏóΪÕûÊýµÄ×î´óÖµ2,147,483,647

    int dest = source;//(2)¸³Öµ£¬ÄÚ²¿Ö´ÐÐÉ±´

    dest = 1024;//(3)¶Ô¿½±´¶ÔÏó½øÐи³Öµ

    source = 2048;//(4)¶ÔÔ´¶ÔÏó½øÐи³Öµ

    Ê×ÏÈ£¨2£©Öн«source¸³¸ødest£¬Ö´ÐÐÁËÉ±´¶¯×÷£¬ÆäʱdestºÍsourceµÄÖµÊÇÒ»ÑùµÄ£¬¶¼ÊÇint.MaxValue£»£¨3£©¶Ôdest½øÐÐÐ޸ģ¬destÖµ±äΪ1024£¬ÓÉÓÚÊÇÉ±´£¬Òò´Ë²»»áÔËÐÐsource£¬sourceÈÔÈ»ÊÇint.MaxValue£»£¨4£©¶Ôsource½øÐÐÁËÐ޸ģ¬Í¬ÑùµÀÀí£¬destÈÔÈ»ÊÇ1024£¬Í¬Ê±int.MaxValueµÄÖµÒ²²»±ä£¬ÈÔÈ»ÊÇ2,147,483,647£»Ö»ÓÐsource±ä³ÉÁË2048¡£

    £¨2£©Ç³¿½±´ÊÇÖ¸Ô´¶ÔÏóÓ뿽±´¶ÔÏó¹²ÓÃÒ»·ÝʵÌ壬½ö½öÊÇÒýÓõıäÁ¿²»Í¬£¨Ãû³Æ²»Í¬£©¡£¶ÔÆäÖÐÈκÎÒ»¸ö¶ÔÏóµÄ¸Ä¶¯¶¼»áÓ°ÏìÁíÍâÒ»¸ö¶ÔÏó¡£¾Ù¸öÀý×Ó£¬Ò»¸öÈËÒ»¿ªÊ¼½ÐÕÅÈý£¬ºóÀ´¸ÄÃû½ÐÀîËÄÁË£¬¿ÉÊÇ»¹ÊÇͬһ¸öÈË£¬²»¹ÜÊÇÕÅÈýȱ¸ì²²ÉÙÍÈ»¹ÊÇÀîËÄȱ¸ì²²ÉÙÍÈ£¬¶¼ÊÇÕâ¸öÈ˵¹Ã¹¡£±È½ÏµäÐ͵ľÍÓÐReference£¨ÒýÓã©¶ÔÏó£¬ÈçClass£¨Àࣩ¡£

    ¿¼ÂÇÒÔÏÂд·¨

    class Point

    {

    public int X;

    public int Y;

    public Point(int x, int y)

    {

    X = x;

    Y = y;

    }

    }

    Point source = new Point(10, 20);

    Point dest = source;

    dest.X = 20;

    ÓÉÓÚPointÏÖÔÚÊÇÒýÓöÔÏó£¬Òò´ËPoint dest=sourceµÄ¸³Öµ¶¯×÷ʵ¼ÊÉÏÖ´ÐеÄÊÇdz¿½±´£¬×îºóµÄ½á¹ûÓ¦¸ÃÊÇsourceµÄX×Ö¶ÎÖµÒ²±ä³ÉÁË20¡£¼´ËüÃÇÒýÓÃÁËͬһ¸ö¶ÔÏ󣬽ö½öÊDZäÁ¿Ã÷sourceºÍdest²»Í¬¶øÒÑ¡£

    2. Êý¾Ý½á¹¹ºÍ½á¹¹Ö¸Õë

    £¨1£©Êý¾Ý½á¹¹£ºÈç¹û½á¹¹µÄ¶¨Òå°üÀ¨²ÎÊýmodel_name (¿ÉÑ¡)£¬¸Ã²ÎÊý¼´³ÉΪһ¸öÓë¸Ã½á¹¹µÈ¼ÛµÄÓÐЧµÄÀàÐÍÃû³Æ¡£ÀýÈ磺

    struct products {
    char name [30];
    float price;
    };
    products apple;
    products orange, melon;

    ÎÒÃÇÊ×Ïȶ¨ÒåÁ˽ṹģ¿éproducts£¬Ëü°üº¬Á½¸öÓò£ºname ºÍ price£¬Ã¿Ò»¸öÓòÊDz»Í¬µÄÊý¾ÝÀàÐÍ¡£È»ºóÎÒÃÇÓÃÕâ¸ö½á¹¹ÀàÐ͵ÄÃû³Æ (products) À´ÉùÃ÷ÁË 3¸ö¸ÃÀàÐ͵ĶÔÏó£ºapple, orange ºÍmelon¡£

    ÔÚÎÒÃÇÉùÃ÷ÁËÈ·¶¨½á¹¹Ä£Ð͵Ä3¸ö¶ÔÏó(apple, orange ºÍ melon)Ö®ºó£¬ÎÒÃǾͿÉÒÔ¶ÔËüÃǵĸ÷¸öÓò(field)½øÐвÙ×÷£¬Õâͨ¹ýÔÚ¶ÔÏóÃûºÍÓòÃûÖ®¼ä²åÈë·ûºÅµã(.)À´ÊµÏÖ¡£ÀýÈ磬ÎÒÃÇ¿ÉÒÔÏñʹÓÃÒ»°ãµÄ±ê×¼±äÁ¿Ò»Ñù¶ÔÏÂÃæµÄÔªËØ½øÐвÙ×÷£º

    apple.name
    apple.price
    orange.name
    orange.price
    melon.name
    melon.price £¨2£©Êý¾Ý½á¹¹Ö¸Õ룺

    ¾ÍÏñÆäËüÊý¾ÝÀàÐÍÒ»Ñù£¬½á¹¹Ò²¿ÉÒÔÓÐÖ¸Õë¡£Æä¹æÔòͬÆäËü»ù±¾Êý¾ÝÀàÐÍÒ»Ñù£ºÖ¸Õë±ØÐë±»ÉùÃ÷Ϊһ¸öÖ¸Ïò½á¹¹µÄÖ¸Õ룺

    struct movies_t {
    char title [50];
    int year;
    };
    movies_t amovie;
    movies_t * pmovie;

    ÕâÀï amovie ÊÇÒ»¸ö½á¹¹ÀàÐÍmovies_t µÄ¶ÔÏ󣬶øpmovie ÊÇÒ»¸öÖ¸Ïò½á¹¹ÀàÐÍmovies_t µÄ¶ÔÏóµÄÖ¸Õë¡£ËùÒÔ£¬Í¬»ù±¾Êý¾ÝÀàÐÍÒ»Ñù£¬ÒÔϱí´ïʽÕýÈ·µÄ£º

    pmovie = &amovie;

    ÉÏÃæµÄ´úÂëÖÐÒýÈëÁËÒ»¸öÖØÒªµÄ²Ù×÷·û£º->¡£ÕâÊÇÒ»¸öÒýÓòÙ×÷·û£¬³£Óë½á¹¹»òÀàµÄÖ¸ÕëÒ»ÆðʹÓã¬ÒÔ±ãÒýÓÃÆäÖеijÉÔ±ÔªËØ£¬ÕâÑù¾Í±ÜÃâʹÓúܶàÀ¨ºÅ¡£ÀýÈ磬ÎÒÃÇÓãº

    pmovie->title

    À´´úÌæ£º

    (*pmovie).title

    ÒÔÉÏÁ½ÖÖ±í´ïʽpmovie->title ºÍ (*pmovie).title ¶¼ÊǺϷ¨µÄ£¬¶¼±íʾȡָÕëpmovie ËùÖ¸ÏòµÄ½á¹¹ÆäÔªËØtitle µÄÖµ¡£ÎÒÃÇÒªÇå³þ½«ËüºÍÒÔϱí´ïÇø·Ö¿ª£º

    *pmovie.title

    ËüÏ൱ÓÚ

    *(pmovie.title)

    ±íʾȡ½á¹¹pmovie µÄÔªËØtitle ×÷ΪָÕëËùÖ¸ÏòµÄÖµ£¬Õâ¸ö±í´ïʽÔÚ±¾ÀýÖÐûÓÐÒâÒ壬ÒòΪtitle±¾Éí²»ÊÇÖ¸ÕëÀàÐÍ¡£

    ϱíÖÐ×ܽáÁËÖ¸ÕëºÍ½á¹¹×é³ÉµÄ¸÷ÖÖ¿ÉÄܵÄ×éºÏ£º

    ±í´ïʽ ÃèÊö µÈ¼ÛÓÚ
    pmovie.title ½á¹¹pmovie µÄÔªËØtitle
    pmovie->title Ö¸Õëpmovie ËùÖ¸ÏòµÄ½á¹¹ÆäÔªËØtitle µÄÖµ (*pmovie).title
    *pmovie.title ½á¹¹pmovie µÄÔªËØtitle ×÷ΪָÕëËùÖ¸ÏòµÄÖµ *(pmovie.title)

    ½á¹¹Ç¶Ì×(Nesting structures)

    ½á¹¹¿ÉÒÔǶÌ×ʹÓ㬼´Ò»¸ö½á¹¹µÄÔªËØ±¾ÉíÓÖ¿ÉÒÔÊÇÁíÒ»¸ö½á¹¹ÀàÐÍ¡£ÀýÈ磺

    struct movies_t {
    char title [50];
    int year;
    }

    struct friends_t {
    char name [50];
    char email [50];
    movies_t favourite_movie;
    } charlie, maria;

    friends_t * pfriends = &charlie;

    Òò´Ë£¬ÔÚÓÐÒÔÉÏÉùÃ÷Ö®ºó£¬ÎÒÃÇ¿ÉÒÔʹÓÃÏÂÃæµÄ±í´ïʽ£º

    charlie.name
    maria.favourite_movie.title
    charlie.favourite_movie.year
    pfriends->favourite_movie.year

    (ÒÔÉÏ×îºóÁ½¸ö±í

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 1/3/3
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºleetcode_6_ZigZag Conversion ÏÂһƪ£ºGoÓïÑÔʵÏÖÌø±í(SkipList)

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Spring Boot Java£º (2025-12-26 16:20:19)
¡¤Spring Boot¤ÇHello (2025-12-26 16:20:15)
¡¤Spring ¤Î»ù±¾¤«¤éŒ (2025-12-26 16:20:12)
¡¤C++Ä£°å (template) (2025-12-26 15:49:49)
¡¤C ÓïÑÔÖÐÄ£°åµÄ¼¸ÖÖ (2025-12-26 15:49:47)