離散數學求通路數和回路數的2種實現

2021-08-20 21:26:45 字數 3064 閱讀 3921

請前輩學長學姐同學們批評指正!

這個是題目:

有向圖d如圖所示,求:……

下面這個是網上的解答:

下面是第一種方法的執行結果:

第一種實現方法**:(這種方法是直接找,使用了多重迴圈和判斷,**又臭又長,但是思想還是比較簡單的,哈哈哈,然後女朋友說他們班有人寫的更好,所以看了下,然後又從網上看了下上面這個圖,我感覺第二種方法比較好,所以也自己實現了下。)

#include int main(int argc, const char * argv)

;    

//(1). v2到v5長度為1,2,3,4的通路數

int len1[5] = ;

int i1=2;

printf("(1)\n");

while(i1)}}

}}}}

}}}for(int t=1;t<5;t++)

printf("v2->v5 長度為 %d 的通路有 %d 個\n",t,len1[t]);

i1=0;

}//(2). v5到v5長度為1,2,3,4的回路數

int i2=5;

int len2[5]=;

printf("(2)\n");

while(i2)}}

}}}}

}}}}

i2=0;

for(int t=1;t<5;t++)

printf("v5->v5 長度為 %d 的迴路有 %d 個\n",t,len2[t]);

}//(3)d中長度為4的通路數(含回路數)

printf("(3)\n");

int len_4=0;

for(int i3=1;i3<=5;i3++)}}

}}}}

}}printf("d中長度=4的通路數(含回路數)有 %d 個\n",len_4);

// (4) d中長度<=4的回路數

printf("(4)\n");

int len4[5]=;

for(int i4=1;i4<=5;i4++)}}

}}}}

}}}}

}len4[0]=len4[1]+len4[2]+len4[3]+len4[4];

printf("d中長度<=4的回路數有 %d 個\n",len4[0]);

//(5)寫出d的可達矩陣

int a1[6][6] =;

printf("(5)\n");

for(int t=1;t<=5;t++)

for(int i5=1;i5<=5;i5++)}}

}}}}

}printf("d的可達矩陣:\n");

for(int t1=1;t1<=5;t1++)

printf("\n");

}return 0;

}

下面是第二種方法的執行結果:

下面是第二種實現方法的**:

//

//  main.c

//  離散實驗3 第二種解法

////  created by hanoi_ahoj on 2018/6/21.

//#include int main(int argc, const char * argv) ;

int aa[6][6]=;   //a^2 = a * a

int aaa[6][6]=;  //a^3 = a^2 * a

int aaaa[6][6]=; //a^4 = a^3 * a

// aa

for(int i=1;i<6;i++)}}

// aaa

for(int i=1;i<6;i++)}}

// aaaa

for(int i=1;i<6;i++)}}

/*printf("a^2:\n");

for(int i=1;i<6;i++)

printf("\n");

}printf("a^3:\n");

for(int i=1;i<6;i++)

printf("\n");

}printf("a^4:\n");

for(int i=1;i<6;i++)

printf("\n");

}*///(1).

printf("(1).v2->v5長度為1,2,3,4的通路數有%d,%d,%d,%d個\n",a[2][5],aa[2][5],aaa[2][5],aaaa[2][5]);

//(2).

printf("v5->v5長度為1,2,3,4的通路數有%d,%d,%d,%d個\n",a[5][5],aa[5][5],aaa[5][5],aaaa[5][5]);

//(3).

int cnt3=0;

for(int i=1;i<6;i++)

}printf("(3).d中長度為4的通路(含迴路)有 %d 條\n",cnt3);

//(4).

int cnt4=0;

for(int i=1;i<6;i++)

cnt4+=aaa[i][i];

printf("(4).d中長度小於或等於4的迴路有 %d 條\n",cnt4);

//(5).

printf("(5).\n");

for(int i=1;i<6;i++)

printf("\n");

}return 0;

}

寫在後面:

總的來說兩種方法的難度都是差不多的。都不難。這是第一篇部落格,加油!

求知若飢,虛心若愚。

離散數學 求主正規化

輸入 命題公式的合式公式 輸出 公式的主析取正規化和主析取正規化,輸出形式為 mi mj mi mj 極小項和 符號之間有乙個空格,極大項和 符號之間有乙個空格 主析取正規化和主合取正規化之間用 隔開,前後各有乙個空格。永真式的主合取正規化為 1 永假式的主析取正規化為 0 輸入公式的符號說明 非,...

離散數學 求排列的逆序數

問題描述 3 2 5 1 4 中,3,2 3,1 2,1 5,1 5,4 是其5個逆序。輸入 第一行是乙個整數n,表示該排列有n個數 n 100000 第二行是n個不同的正整數,之間以空格隔開,表示該排列。輸出 輸出該排列的逆序數。樣例輸入 3 2 5 1 4 樣例輸出 限時一秒 思路 利用二分歸併...

離散數學 求命題公式的主正規化

實現功能 輸入命題公式的合式公式,求出公式的真值表,並輸出該公式的主合取正規化和主析取正規化。輸入 命題公式的合式公式 輸出 公式的主析取正規化和主析取正規化,輸出形式為 mi mj mi mj 極小項和 符號之間有乙個空格,極大項和 符號之間有乙個空格 主析取正規化和主合取正規化之間用 隔開,前後...