日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解题报告 树形图计数

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解题报告 树形图计数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.????????題目

樹形圖計數

count.pas/c/cpp

?

【問題描述】

k同學最近正在研究最小樹形圖問題。所謂樹形圖,是指有向圖的一棵有根的生成樹,其中樹的每一條邊的指向恰好都是從根指向葉結點的方向。現在小k在紙上畫了一個圖,他想讓你幫忙數一下這個圖有多少棵樹形圖。

?

【輸入格式】

1行輸入1個正整數:n,表示圖中點的個數

2~n+1行每行輸入n個字符,描述了這個圖的鄰接矩陣。第i+1行第j個字符如果是0則表示沒有從i連向j的有向邊,1表示有一條從ij的有向邊。

?

【輸出格式】

輸出11個整數,表示這個有向圖的樹形圖個數。

?

【樣例輸入】

count.in

4

0100

0010

0001

1000

?

【樣例輸出】

count.out

4

?

【數據規模和約定】

對于100%的數據,n<=8?.

2.????????算法

以每一個節點為根,判斷從這個根開始用有向邊能不能找到所有節點,如果能則記錄。

?

判斷方法:首先將這棵樹構建出來,也就是輪流將該點的入度所連的點作為他的父親節點,看可不可以將這棵樹構建出來,如果可以,再看構建出來的樹能不能找到所有節點。

3.????????注意事項

要先將這棵樹構建出來,再判斷。

4.????????代碼

深搜+判斷(ASDF)

program?asdf;

??var

????b,a:array[0..10,0..10]of?longint;

????f,ff:array[0..10]of?boolean;

????fa:array[0..10]of?longint;

????n,i,j,k,root:longint;

????all,sum,ans:qword;

????flag:boolean;

????ch:char;

??function?judge:boolean;

????var

??????i,x:longint;

????begin

??????fillchar(f,sizeof(f),false);

??????f[root]:=true;

??????for?i:=1?to?n?do

????????begin

??????????fillchar(ff,sizeof(ff),false);

??????????x:=fa[i];

??????????while?(fa[x]<>root)and(not?f[fa[x]])and(fa[x]<>0)?do

????????????begin

??????????????if?ff[x]?then?exit(false);

??????????????ff[x]:=true;

??????????????x:=fa[x];

????????????end;

??????????if?fa[x]=0?then?exit(false);

??????????if?(fa[x]=root)or(f[fa[x]])?then

????????????begin

??????????????x:=i;

??????????????while?not?f[x]?do

????????????????begin

??????????????????f[x]:=true;

??????????????????x:=fa[x];

????????????????end;

????????????end;

????????end;

??????exit(true);

????end;

??procedure?dfs(x:longint);

????var

??????i:longint;

????begin

??????if?x=root?then

????????begin

??????????dfs(x+1);

??????????exit;

????????end;

??????if?x=n+1?then

????????begin

??????????if?judge?then?inc(ans);

??????????exit;

????????end;

??????for?i:=1?to?n?do

????????if?b[i,x]<>0?then

??????????begin

????????????fa[x]:=i;

????????????dfs(x+1);

??????????end;

????end;

??begin

????assign(input,'count.in');reset(input);

????assign(output,'count.out');rewrite(output);

????readln(n);

????for?i:=1?to?n?do

??????begin

????????for?j:=1?to?n?do

??????????begin

????????????read(ch);

????????????if?ch='1'?then?b[i,j]:=1

????????????else?b[i,j]:=0;

??????????end;

????????readln;

??????end;

????for?root:=1?to?n?do

??????begin

????????flag:=false;

????????for?i:=1?to?n?do

??????????if?b[root,i]<>0?then

????????????begin

??????????????flag:=true;

??????????????break;

????????????end;

????????fa[root]:=root;

????????if?flag?then

??????????dfs(1);

??????end;

????write(ans);

????close(input);

????close(output);?

??end.

?

轉載于:https://www.cnblogs.com/SueMiller/archive/2011/10/15/2213100.html

總結

以上是生活随笔為你收集整理的解题报告 树形图计数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。