UVA10766(生成樹(shù)計(jì)數(shù))

代碼改模板沒(méi)怎么改出來(lái).看的別人的改的,還是有點(diǎn)不懂.

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=55;
typedef long long int ll;

int deg[MAX];
int g[MAX][MAX];
ll b[MAX][MAX];

ll Det(int n){
    int i,j,k;
    ll ret = 1;
    for(i=2;i<=n;i++){
        for(j = i+1;j <= n;j++){
            while(b[j][i]){  //如果該點(diǎn)未被連接
                ll tmp=b[i][i]/b[j][i];
                for(k = i;k <= n;k++)
                    b[i][k] -= tmp*b[j][k];
                for(k=i;k<=n;k++)
                    swap(b[i][k],b[j][k]);  //換列
                ret = -ret;
            }
        }
        if(!b[i][i]) return 0;
        ret *= b[i][i];
    }
    if(ret < 0) ret = -ret;
    return ret;

}

int main()
{
    int n,m,k;
    while(scanf("%d%d%d",&n,&m,&k) != EOF){
        int u,v;
        memset(deg,0,sizeof(deg));
        memset(g,0,sizeof(g));
        memset(b,0,sizeof(b));
        while(m--){
            scanf("%d%d",&u,&v);
            g[u][v] = 1;g[v][u] = 1;  //存入鄰接矩陣

        }

        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= n;j++){
                if(!g[i][j] && i != j){
                     b[i][j] = -1;
                     deg[i]++;
                }
            }
        }
        for(int i = 1;i <= n;i++){
            b[i][i] = deg[i];     //建立度數(shù)矩陣
        }
          //下面注釋的部分可以打印出矩陣
    /*
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf(" %d",b[i][j]);
            }puts("");
        }*/

        printf("%lld\n",Det(n));

    }
return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容