以圖判樹c語言,c語言關於樹的算法

本文目錄一覽:

c語言判斷有向圖G是否是一棵以v0為根的有向樹

遍歷一下算出這棵樹的深度k,然後用公式看看深度和點數之間是否具有點數n=2^k-1的關係,具有就是完全二叉樹,否則不是。

C語言,判斷樹的編程

一般構樹的題都用最小生成樹算法,但鑒於你的這題的特殊性,直接深搜,O(n)的時間複雜度就可以過了

#includecstdio

#includecstring

using namespace std;

bool bo[1100];

int n,m,a[1100][1100];

void search(int x){

for(int i=1;i=a[x][0];i++){//詢問與x相連的每一個點是否染了色

int y=a[x][i];

if(!bo[y]){//如果y沒有被染色,就把y染色,並用y去更新別的節點

bo[y]=1;

search(y);

}

}

}

int main(){

scanf(“%d%d”,n,m);//這裡需要你輸入結點個數和邊數,比如你的那組數據就輸入10 9表示10個點,9條邊

if(mn-1){printf(“NO\n”);return 0;}//如果你的邊數比節點數-1還要小的話,那根本不可能聯成一個整體

for(int i=1;i=m;i++){

int x,y;scanf(“%d%d”,x,y);

a[x][++a[x][0]]=y;//記錄下x這個點可以連到y這個點,下同

a[y][++a[y][0]]=x;

}

memset(bo,0,sizeof(bo));//剛開始時除節點1外沒有一個節點是在這個圖中的,然後從1開始往別的點染色

bo[1]=1;

search(1);

for(int i=1;i=n;i++)

if(!bo[i]){//如果有點沒有被染色就說明不能連成一棵樹

printf(“NO\n”);

return 0;

}

printf(“YES\n”);

return 0;

}

平衡二叉樹的判定的c語言算法

設置一個char a[]來保存輸入的Input 然後遍曆數組a[],直到strlen 根據a[]/刪除平衡平衡二叉樹的結點e,並保持平衡二叉樹的性質。 int

判斷完全二叉樹用C語言編寫

用一個線性表和一個隊列,表存放的是邊集,隊列用於按層次遍歷。程序流程如下

1 初始化空表、空隊;

2 輸入結點數、指定根結點,輸入邊到表中;

3 根結點進隊;

4 將隊首出隊到p;

5 若表為空,返回1(真)。不空則在表中查找第一項等於p的邊i。若找到,將邊i的第二項進隊,從表中刪除邊i。若沒有找到,則返回0(假)。

6 若表為空,返回1(真)。不空則在表中查找第二項等於p的邊i。若找到,將邊i的第一項進隊,從表中刪除邊i。若沒有找到,則返回0(假)。

7 跳到4。

補充提供一個相應的程序代碼如下,你可以試試

#include stdio.h

#define N 1024

void main( )

{

    short list[N][2], queue[N], listLength = 0, front = 0, rear = 0, r, n, i, p;/*1  初始化空表,空隊*/

    char flag;   /*flag是判斷結果標識*/

    scanf(“%d%d”, n, r);    /*2  輸入結點數、指定根結點,輸入邊到表中*/

    for(i = 0; i n – 1; i++)

        scanf(“%d%d”, list[i][0], list[i][1]);

    listLength = n – 1;

    queue[rear++] = r;    /*3  根結點進隊*/

    while(1) {

        p = queue[front++];   /*4  將隊首出隊到p*/

        if(listLength == 0) {    /*5  如果表為空,則返回1(真)*/

            flag = 1;  

            break;

        }

        for(i = 0; i listLength list[i][0] != p; i++);  /*尋找第一項等於p的邊i*/

        if(i == listLength) {    /*如果沒有找到,返回0(假)*/

            flag = 0;

            break;

        }

        queue[rear++] = list[i][1];   /*將邊i的第二項進隊*/

        for(; i listLength – 1; i++)        /*刪除邊i*/

            list[i][0] = list[i + 1][0], list[i][1] = list[i + 1][1];

        listLength–;

if(listLength == 0) {   /*6  若表為空,返回1(真)*/

            flag = 1;

            break;

        }

        for(i = 0; i listLength list[i][1] != p; i++);   /*在表中查找第二項等於p的邊i*/

        if(i == listLength) {    /*如果沒有找到,返回0(假)*/

            flag = 0;

            break;

        }

        queue[rear++] = list[i][0];   /*將邊i的第一項進隊*/

        for(; i listLength – 1; i++)           /*刪除邊i*/

            list[i][0] = list[i + 1][0], list[i][1] = list[i + 1][1];

        listLength–;

    }    /*7  跳到4*/

    if(flag)

        printf(“yes\n”);

    else

        printf(“no\n”);

}

運行結果

C語言(關於圖最小生成樹方法)

/*

鄰接矩陣存儲圖

測試數據

6 10

1 2 6

1 3 1

1 4 5

2 3 5

2 5 3

3 4 5

3 5 6

3 6 4

4 6 2

5 6 6

*/

#include stdio.h

#include limits.h

#define N 100

int p[N], key[N], tb[N][N];

void prim(int v, int n)

{

   int i, j;

   int min;

   for (i = 1; i = n; i++)

   {

       p[i] = v;

       key[i] = tb[v][i];

   }

   key[v] = 0;

   for (i = 2; i = n; i++)

   {

       min = INT_MAX;

       for (j = 1; j = n; j++)

           if (key[j]  0  key[j]  min)

           {

                v = j;

                min = key[j];

           }

       printf(“%d%d “, p[v], v);

       key[v] = 0;

       for (j = 1; j = n; j++)

           if (tb[v][j]  key[j])

              p[j] = v, key[j] = tb[v][j];

   }

}

int main()

{

   int n, m;

   int i, j;

   int u, v, w;

   while (scanf(“%d%d”, n, m))

   {

       for(i = 1; i = n; i++)

       {

           for (j = 1; j = n; j++)

               tb[i][j] = INT_MAX;

       }

       while (m–)

       {

           scanf(“%d%d%d”, u, v, w);

           tb[u][v] = tb[v][u] = w;

       }

       prim(1, n);

       printf(“\n”);

   }

   return 0;

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/245878.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:11
下一篇 2024-12-12 13:11

相關推薦

  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 數據結構與算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序算法、字符串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • 瘦臉算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉算法 Python 實現的原理和方法,包括該算法的意義、流程、代碼實現、優化等內容。 一、算法意義 隨着科技的發展,瘦臉算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論