森林轉換成二叉樹以及二叉樹還原為森林代碼

 1 /*
 2      森林轉換成二叉樹
 3      思路:u的孩子節點為v1, v2, v3....(v1,v2,....互為兄弟節點) 
 4      那么將u的一個孩子節點(v1)連在u的左子樹上,那么其他的孩子節點都連在v1的右子樹上! 
 5 */ 
 6 #include<iostream>
 7 #include<cstring>
 8 #include<cstdio>
 9 #include<algorithm>
10 using namespace std;
11 int g[15][15];
12 int par[15];//如果該節點有父親節點說明該節點不是一個獨立的點! 
13 int vis[15];
14 
15 struct Tree{
16     int  d;
17     Tree *lchild, *rchild; 
18     Tree(){
19        lchild=rchild=NULL; 
20     }
21     
22     Tree(int x){
23        lchild=rchild=NULL; 
24        d=x;
25     }
26 };
27 int n, m;
28 
29 void buildT(Tree* &T, int u){
30     bool flag=false;
31     T=new Tree(u);
32     Tree *cur=T; 
33     vis[u]=1;
34     for(int v=1; v<=n; ++v)
35        if(g[u][v]){
36           if(!flag){
37              buildT(cur->lchild, v);
38              cur=cur->lchild;
39              flag=true;
40           }
41           else{
42              buildT(cur->rchild, v);
43              cur=cur->rchild;
44           }
45        }
46 }
47 
48 
49 void prePrint(Tree *T){
50    if(!T) return ;
51    cout<<T->d<<" ";
52    prePrint(T->lchild);
53    prePrint(T->rchild);
54 }
55 
56 
57 int main(){
58    Tree *T=NULL; 
59    while(cin>>n>>m){
60          memset(g, 0, sizeof(g));
61          memset(vis, 0, sizeof(vis));
62       while(m--){
63          int u, v;
64          cin>>u>>v;
65          g[u][v]=1;
66          par[v]=u;
67       }
68       bool flag=false;
69       Tree *cur;
70       for(int i=1; i<=n; ++i)
71           if(!vis[i]){ 
72              if(!flag){
73                 flag=true;
74                 buildT(T, i); 
75                 cur=T; 
76              }
77              else if(!par[i]){//也就是找入度為0的節點! 
78                 buildT(cur->rchild, i);
79                 cur=cur->rchild;
80              }
81           }
82       prePrint(T);
83    }
84    return 0;
85 }
86  

?

//數組實現....森林轉成二叉樹以及二叉樹還原成森林
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 100 
using namespace std;int mp[N][N];
int pp[N][N];
int n, m;
int ld[N], rd[N], par[N];void printT(int u){if(u==0) return;printT(ld[u]);printT(rd[u]); printf("%d ", u);
}void rebuildMap(int u, int fa){if(u==0) return ;if(fa!=-1)  pp[fa][u]=1;rebuildMap(ld[u], u);rebuildMap(rd[u], fa);//u節點以及其兄弟節點的父親節點都是u的父親節點
} void buildT(int u){int v, cur;bool flag=false; for(v=1; v<=n; ++v)if(mp[u][v]){if(!flag){ld[u]=v;cur=v;flag=true;}else{rd[cur]=v;//將u的兄弟節點都鏈接在右子樹上cur=v;}buildT(v);} 
}int main(){while(scanf("%d%d", &n, &m)!=EOF){memset(par, 0, sizeof(par));memset(pp, 0, sizeof(pp));memset(mp, 0, sizeof(mp));while(m--){int u, v;scanf("%d%d", &u, &v);mp[u][v]=1;par[v]=u;} int root=-1, cur;for(int i=1; i<=n; ++i){if(!par[i]){if(root!=-1) rd[cur]=i;if(root==-1) root=i; buildT(i); cur=i;}}printf("打印樹.....\n"); printT(root);printf("\n");rebuildMap(root, -1);printf("\n\n還原樹....\n"); for(int i=1; i<=n; ++i)for(int j=1; j<=n; ++j)if(pp[i][j])printf("%d %d\n", i, j);printf("KO!\n"); }return 0;
} 
/*
測試數據.....
11 8
2 1
2 3
2 4
5 6
6 9
5 7
5 8
11 10
*/

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3924955.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531724.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

poj1062昂貴的聘禮(Dijkstra**)

1 /*2 題意&#xff1a; 物主有一個物品&#xff0c;價值為P&#xff0c;地位為L&#xff0c; 以及一系列的替代品Ti和該替代品所對應的"優惠"Vi3 g[u][i] 表示的是u物品被i物品替換后的優惠價格&#xff01;(u>0, i>0)4 g[u][0]表示不用替換該物品的…

java openmp庫_OpenMP的環境變量及庫函數

OpenMP的環境變量&#xff1a;環境變量 描述 示例OMP_SCHEDULE 控制for循環任務分配結構的調度 OMP_SCHEDULE"guided,2"OMP_NUM_THREADS 設置默認線程的個數 OMP_SCHEDULE4OpenMP的庫函數函數名稱 描述int omp_get_num_threads(void) 返回當前使用的線程個數&#xf…

hdu1269迷宮城堡(判斷有向圖是否是一個強連通圖)

1 /* 題意&#xff1a; 給你一個圖&#xff0c;求這個有向圖示否是一個強連通圖&#xff08;每兩個節點都是可以相互到達的&#xff09;&#xff01; 思路1&#xff1a;按正向邊dfs一遍&#xff0c;將經過的節點計數&#xff0c;如果記錄的節點的個數小于…

mgg mysql_mgg文件怎么轉換mp3格式?

步驟/方法方法/步驟1:下載載視頻轉換器&#xff0c;我們說到在官網下載比較好吧。下載完成之后&#xff0c;我們就直接點擊進行安裝&#xff0c;一般 在安裝的過程也是非常快速的&#xff0c;主要是按照安裝向導上的步驟進行就可以了。方法/步驟2:安裝好之后&#xff0c;我們就…

poj 2385Apple Catching(簡單dp)

1 /*2 題意&#xff1a; 有兩棵蘋果樹&#xff0c;每一棵蘋果樹每一秒間隔的掉落下來一個蘋果&#xff0c;一個人在樹下接住蘋果&#xff0c;不讓蘋果掉落&#xff01;3 人在兩棵樹之間的移動是很快的&#xff01;但是這個人移動的次數是有限制的&#xff0c;問最多可以…

java dao 泛型的好處_java中泛型有什么作用

泛型的作用如下&#xff1a;1、類型安全泛型的主要目標是提高 Java 程序的類型安全。編譯時的強類型檢查&#xff1b;通過知道使用泛型定義的變量的類型限制&#xff0c;編譯器可以在一個高得多的程度上驗證類型假設。沒有泛型&#xff0c;這些假設就只存在于程序員的頭腦中(或…

poj3249Test for Job(記憶化搜索)

1 /*2 題意&#xff1a;給一個DAG圖&#xff0c;n個節點&#xff0c;每個節點都對應一個值&#xff0c;入度為零的點走到出度為零的點&#xff0c;計算所有可能路徑3 經過節點值的和最大&#xff01;4 5 思路&#xff1a;記憶話搜索&#xff1a;也就是如果我們搜索…

Java兩同_java:一個類實現的兩個接口里都有同一個方法(名),怎么處理?

不一定&#xff0c;關鍵要看子類是否是抽象類。如果子類是非抽象類&#xff0c;則必須實現接口中的所有方法&#xff1b;如果子類是抽象類&#xff0c;則可以不實現接口中的所有方法&#xff0c;因為抽象類中允許有抽象方法的存在&#xff01;1、抽象類定義抽象類往往用來表征對…

ZOJ3805Machine(二叉樹左右子樹變換)

1 /*2 題意&#xff1a;建立一棵二叉樹&#xff0c;左子樹和父節點占一個寬度&#xff0c;右子樹另外占一個寬度&#xff01;3 使任意左右子樹交換順序&#xff0c;使得整個樹的寬度最小&#xff01;4 思路&#xff1a;遞歸交換左右子樹 &#xff01; …

java ==和=_Java ==和equals()的區別

前言本篇文章講的是從JVM角度比較和equals的區別一&#xff1a;** Java數據類型分類**Paste_Image.png1&#xff1a;基本數據類型又稱為原始數據類型&#xff0c;他們之間的比較應該使用()&#xff0c;比較的是他們的值。2&#xff1a;引用數據類型當引用數據類型用()進行比較&…

ZOJ 3804 YY's Minions (簡單模擬)

1 /*2 題意&#xff1a;一個矩陣中有 n*m個寵物&#xff0c;每一個寵物都有一個狀態&#xff0c; 1醒著的&#xff0c;0睡著的3 X離開的&#xff01;如果這個寵物&#xff08;醒著的&#xff09;的周圍醒著的個數>3 || <2它就會睡著&#xff0c;4 如果這個寵物&…

java接口方法實現_Java接口的簡單定義與實現方法示例

本文實例講述了Java接口的簡單定義與實現方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;1、接口是Java中最終要的概念&#xff0c;接口可以理解為一種特殊的類&#xff0c;里面全部是由全局常量和公共的抽象方法所組成。2、接口的格式:interface interfaceName{全…

NYOJ995硬幣找零(簡單dp)

1 /*2 題意&#xff1a;給你不同面額的硬幣&#xff08;每種硬幣無限多&#xff09;&#xff0c;需要找零的面值是T&#xff0c;用這些硬幣進行找零&#xff0c;3 如果T恰好能被找零&#xff0c;輸出最少需要的硬幣的數目&#xff01;否則請輸出剩下錢數最少的找零方案…

docker mysql命令大全_Docker命令大全

Docker run 命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS說明&#xff1a;-a stdin: 指定標準輸入輸出內容類型&#xff0c;可選 STDIN/STDOUT/STDERR 三項&#xff1b;-d: 后臺運行容器&#xff0c;并返回容器ID&#xff1b;-i: 以交互模式運行容器&#xff0c;…

NYOJ 1023 還是回文(DP,花最少費用形成回文串)

1 /*2 題意&#xff1a;給出一串字符(全部是小寫字母)&#xff0c;添加或刪除一個字符&#xff0c;都會產生一定的花費。3 那么&#xff0c;將字符串變成回文串的最小花費是多少呢&#xff1f; 4 5 思路&#xff1a;如果一個字符串增加一個字符 x可以形成一個回文串…

java mapreduce教程_Java搭建MapReduce完成二次排序步驟

1、構建新的作業Configuration confgetConf();Job jobJob.getInstance(conf);job.setJarByClass(SortYearAndTemp2.class);2、設置輸入輸出目錄Path inpathnew Path(conf.get("inpath"));Path outpathnew Path(conf.get("outpath"));FileInputFormat.addIn…

contentprovider java_創建Contentprovider,

創建Contentprovider:1. 創建一個provider----ExampleContentProvidera. 設計authority b. 設計path c.處理content URI IDs d.Content URI patterns)定義MIME Types(One of the required methods that you must implement for any provider.A method that youre expected to i…

hdu Caocao's Bridges(無向圖邊雙連通分量,找出權值最小的橋)

1 /*2 題意&#xff1a;給出一個無向圖&#xff0c;去掉一條權值最小邊&#xff0c;使這個無向圖不再連同&#xff01;3 4 tm太坑了...5 1,如果這個無向圖開始就是一個非連通圖&#xff0c;直接輸出06 2&#xff0c;重邊&#xff08;兩個節點存在多條邊&am…

poj1273Drainage Ditches

1 #include<iostream>2 /*3 題意&#xff1a;就是尋找從源點到匯點的最大流&#xff01;4 要注意的是每兩個點的流量可能有多個&#xff0c;也就是說有重邊&#xff0c;所以要把兩個點的所有的流量都加起來5 就是這兩個點之間的流量了&#xff0…

Java11.0.2怎么生成JRE_java環境變量配置,jdk13.0.1中沒有jre解決辦法

標簽&#xff1a;完成后 回車 手動 完成 cmd 沒有 alt span 環境變量配置java.Oracle中下載了最新的jdk13.0.1&#xff0c;安裝之后發現沒自動生成jre&#xff0c;導致環境變量配置一直不成功如果沒有自動生成jre&#xff0c;需要手動生成jre手動生成辦法&…