<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      書山有徑勤為路>>>>>>>>

      <<<<<<<<學海無涯苦作舟!

      鄰接表的使用

      鄰接表使用在什么時候呢?

      想了想,覺得應該用來存儲樹。

      還是來看一個例子吧。

      題目:在一棵根樹上,Alice和Bob分別在其中某些結點上有一些大石頭。

           現在Alice和Bob輪流移動屬于自己的石頭,移動的規則是這樣的,

           選擇某個結點上的一塊石頭,將石頭移到該結點的父結點,當然,

           位于根結點的石頭是不可移動的,因為根結點沒有父結點。Alice

           先移動,當一方沒有石頭可移動的時候就輸了。

      題解:只需計算每個石頭的移動次數,即所在結點在根樹中的深度即可。

           現在我們已知的是根結點為0,那么我們我們可以用鄰接表來存儲,

         可以從0號結點對遠向圖進行遍歷,可采用深度優先或廣度優先

           來做。

       

      深度優先代碼:

      View Code
      #include<stdio.h>
      #include<string.h>
      #define MAXN 10
      
      int n, m1, m2;
      int degree[MAXN];
      int list[MAXN][MAXN];
      int dep[MAXN];
      
      void DFS(int f, int u, int d){
          dep[u] = d;
          for(int i=0; i<degree[u]; i++){
              int v = list[u][i];
              if(v==f) continue;
              DFS(u, v, d+1);
          }
      }
      
      int main(){
          while(scanf("%d%d%d", &n, &m1, &m2)==3){
              memset(degree, 0, sizeof(degree));
              for(int i=1, x, y; i<n; i++){
                  scanf("%d%d", &x, &y);
                  list[x][degree[x]++] = y;
                  list[y][degree[y]++] = x;
              }
              DFS(-1, 0, 0);
              int f1, f2, u;
              f1 = f2 = 0;
              for(int i=0; i<m1; i++){
                  scanf("%d", &u);
                  f1+=dep[u];
              }
              for(int i=0; i<m2; i++){
                  scanf("%d", &u);
                  f2+=dep[u];
              }
              if(f1<=f2) printf("Bob\n");
              else printf("Alice\n");
          }
      }

       

      廣度優先代碼:

      View Code
      #include<stdio.h>
      #include<string.h>
      #include<queue>
      #include<iostream>
      using namespace std;
      #define MAXN 10
      
      int n, m1, m2;
      int degree[MAXN];
      int list[MAXN][MAXN];
      int dep[MAXN];
      
      void BFS(){
          queue<int> q;
          q.push(0);
          memset(dep, 0, sizeof(dep));
          while(!q.empty()){
              int u = q.front();
              q.pop();
              for(int i=0; i<degree[u]; i++){
                  int v = list[u][i];
                  if(v==0) continue;
                  if(dep[v]!=0) continue;
                  q.push(v);
                  dep[v] = dep[u]+1;
              }
          }
      }
      
      int main(){
          while(scanf("%d%d%d", &n, &m1, &m2)==3){
              memset(degree, 0, sizeof(degree));
              for(int i=1, x, y; i<n; i++){
                  scanf("%d%d", &x, &y);
                  list[x][degree[x]++] = y;
                  list[y][degree[y]++] = x;
              }
              BFS();
              int f1, f2, u;
              f1 = f2 = 0;
              for(int i=0; i<m1; i++){
                  scanf("%d", &u);
                  f1+=dep[u];
              }
              for(int i=0; i<m2; i++){
                  scanf("%d", &u);
                  f2+=dep[u];
              }
              if(f1<=f2) printf("Bob\n");
              else printf("Alice\n");
          }
      }

       

      #include<stdio.h>
      #include<string.h>
      #include<queue>
      #include<iostream>
      using namespace std;
      #define MAXN 10
      
      int n, m1, m2;
      int degree[MAXN];
      int list[MAXN][MAXN];
      int dep[MAXN];
      
      void BFS(){
          queue<int> q;
          q.push(0);
          memset(dep, 0, sizeof(dep));
          while(!q.empty()){
              int u = q.front();
              q.pop();
              for(int i=0; i<degree[u]; i++){
                  int v = list[u][i];
                  if(dep[v]!=0) continue;
                  q.push(v);
                  dep[v] = dep[u]+1;
              }
          }
      }
      
      int main(){
          while(scanf("%d%d%d", &n, &m1, &m2)==3){
              memset(degree, 0, sizeof(degree));
              for(int i=1, x, y; i<n; i++){
                  scanf("%d%d", &x, &y);
                  list[x][degree[x]++] = y;
                  list[y][degree[y]++] = x;
              }
              BFS();
              int f1, f2, u;
              f1 = f2 = 0;
              for(int i=0; i<m1; i++){
                  scanf("%d", &u);
                  f1+=dep[u];
              }
              for(int i=0; i<m2; i++){
                  scanf("%d", &u);
                  f2+=dep[u];
              }
              if(f1<=f2) printf("Bob\n");
              else printf("Alice\n");
          }
      }

      posted on 2012-05-04 15:45  More study needed.  閱讀(320)  評論(0)    收藏  舉報

      導航

      書山有徑勤為路>>>>>>>>

      <<<<<<<<學海無涯苦作舟!

      主站蜘蛛池模板: 国产在线视频精品视频| 久久精品天天中文字幕人妻| 国产乱色国产精品免费视频| 日韩中文字幕亚洲精品一| 亚洲v欧美v国产v在线观看| 视频| 亚洲中文久久久精品无码| 国产熟女av一区二区三区| 最新亚洲精品国偷自产在线| 翘臀少妇被扒开屁股日出水爆乳| 免费国产拍久久受拍久久| 亚洲国产成人精品女人久| 亚洲大尺度无码无码专线| 少妇被粗大的猛烈进出69影院一| 久久亚洲人成网站| 日本做受高潮好舒服视频| 真人性囗交视频| 动漫AV纯肉无码AV电影网| 日韩人妻系列无码专区| 亚洲精品国产中文字幕| 国产精品女人毛片在线看| 麻豆亚洲精品一区二区| 久久精品成人无码观看免费| 国产激情一区二区三区在线| 乱码精品一区二区三区| 聂荣县| 无码伊人久久大杳蕉中文无码 | 浓毛老太交欧美老妇热爱乱| 精品久久久久久国产| 92精品国产自产在线观看481页| 先锋影音av最新资源| 久久亚洲精品成人综合网| 久久精品免视看国产成人| 精品中文人妻在线不卡| 精品无码久久久久国产电影| 久久久精品国产精品久久| 国产精品视频一区不卡| 亚洲一区二区av偷偷| 成人国产精品免费网站| 亚洲中文字幕人妻系列| 亚洲区一区二区三区精品|