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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

离散数学实验题目-图

發布時間:2024/10/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 离散数学实验题目-图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
離散數學實驗報告 計算機科學與技術系

目錄
第一章 實驗概述 3
1.1 實驗目的 3
1.2 實驗內容 3
1.3 實驗環境 3
第二章 實驗原理和實現過程 4
2.1 實驗原理 4
2.2 實驗過程(算法描述) 4
2.2.1 程序整體思路 4
2.2.2具體算法流程 4
第三章 實驗數據及結果分析 6
第四章 實驗收獲和心得體會 6
4.1 實驗收獲 6
4.2 心得體會 6
第五章 實驗源程序清單 8
5.1 程序代碼 7

第一章 實驗概述
1.1 實驗目的
理解圖論的基本概念,圖的矩陣表示,圖的連通性,圖的遍歷,以及求圖的連通支方法。
通過實驗,幫助學生更好地掌握計算機科學技術常用的離散數學中的概念、性質和運算,培養邏輯思維;通過實驗提高學生編寫實驗報告、總結實驗結果的能力,提高理論聯系實際的能力;使學生具備程序設計的思想,能夠獨立完成簡單的算法設計和分析。通過實驗報告的編寫,掌握目錄、頁碼等文檔編輯技巧。
1.2 實驗內容
以偶對的形式輸入一個無向簡單圖的邊,建立該圖的鄰接矩陣,判斷圖(考慮有向圖和無向圖):
(1)圖是否連通;
(2)計算結點兩兩之間長度為m的路徑數目;
(3)對不連通的圖輸出其各個連通支。
基本要求:程序需具有基本的容錯控制,在輸入錯誤時有處理手段;程序界面友好,需要輸入的地方有輸入說明,說明輸入的內容和格式要求等;實驗原理和實現過程應該詳細分析問題,給出解決思路,描述算法思想,不能用源程序代替算法;測試數據應全面,包括非法輸入的處理結果等都應包含在內;程序代碼關鍵部分要加注釋。實驗報告文檔要求有目錄格式,封面不編頁碼,目錄和正文單獨編頁碼。
1.3 實驗環境
C或C++語言編程環境實現。
第二章 實驗原理和實現過程
2.1 實驗原理
圖論、鄰接矩陣、Floyd算法、深度優先算法、矩陣乘積
2.2 實驗過程(算法描述)
2.2.1 程序整體思路

矩陣乘積判斷圖是否連通;
Floyd算法計算結點兩兩之間長度為m的路徑數目;
Floyd算法,用通俗的語言來描述的話,首先我們的目標是尋找從點i到點j的路徑。
從任意節點i到任意節點j的路徑不外乎2種可能,1是直接從i到j,2是從i經過若干個節點k到j。
深度優先算法搜索對不連通的圖輸出其各個連通支

2.2.2具體算法流程

矩陣乘積:
一個m行n列的矩陣與一個n行p列的矩陣可以相乘,得到的結果是一個m行p列的矩陣,其中的第i行第j列位置上的數為第一個矩陣第i行上的n個數與第二個矩陣第j列上的n個數對應相乘后所得的n個乘積之和。
Floyd算法:

  • 從任意一條單邊路徑開始。
  • 對于每一對頂點 u 和 v,看看是否存在一個頂點 w 使得從 u 到 w 再到 v。如果是更新它。
  • 深度優先算法:

  • 假設初始狀態是圖中所有頂點都未被訪問,則深度優先搜索方法的步驟是:
  • 選取圖中某一頂點Vi為出發點,訪問并標記該頂點;
  • 以Vi為當前頂點,依次搜索Vi的每個鄰接點Vj,若Vj未被訪問過,則訪問和標記鄰接點Vj,若Vj已被訪問過,則搜索Vi的下一個鄰接點;
  • 以Vj為當前頂點,重復步驟2),直到圖中和Vi有路徑相通的頂點都被訪問為止;
  • 若圖中尚有頂點未被訪問過(非連通的情況下),則可任取圖中的一個未被訪問的頂點作為出發點,重復上述過程,直至圖中所有頂點都被訪問。
  • 第三章 實驗數據及結果分析

    第四章 實驗收獲和心得體會
    1、更好地理解掌握計算機科學技術常用的離散數學中的關系的概念、性質和運算,培養邏輯思維;
    2、通過實驗提高編寫實驗報告、總結實驗結果的能力,提高理論聯系實際的能力;
    3、具備程序設計的思想,能夠獨立完成簡單的算法設計和分析;
    4、通過實驗提高了報告的編寫,掌握目錄、頁碼等文檔編輯技巧;
    5、學會用計算機編程語言解決離散數學問題;
    6、具有基本的程序調試能力;
    7、學會分析問題,給出解決思路,描述算法思想;
    8、理解圖論的基本概念,圖的矩陣表示,圖的連通性,圖的遍歷,以及求圖的連通支方法;
    9、學會Floyd算法、深度優先算法、矩陣乘積;
    10、熟悉關系的閉包運算,編程實現關系閉包運算算法。
    11、熟悉圖的矩陣表示方法——鄰接矩陣、可達矩陣和關聯矩陣。

    第五章 實驗源程序清單

    /* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> using namespace std; bool check(int a[100][100],int n){int b[100][100];memcpy(b,a,sizeof(b));for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)b[i][j]=b[i][j]||(b[i][k]&&b[k][j]);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(!b[i][j])return 0;return 1; } long long cntm(int a[100][100],int n,int m){int b[100][100],c[100][100],d[100][100];memcpy(b,a,sizeof(b));for(int i=1;i<=n;i++)c[i][i]=1;while(m--){memset(d,0,sizeof(d));for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)d[i][j]+=c[i][k]*b[k][j];memcpy(c,d,sizeof(c));}long long res=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)res+=c[i][j];return res; } int vis[100]; void dfs(int a[100][100],int u,int c,int n){vis[u]=c;for(int i=1;i<=n;i++){if(!vis[i]&&a[u][i])dfs(a,i,c,n);} } int main() {int n,m;int a[100][100];int b[100][100];cout<<"請輸入邊數:"<<endl;cin>>n;cout<<"請輸入邊:"<<endl;int u,v;int N=0;for(int i=1;i<=n;i++){scanf("%d%d",&u,&v);a[u][v]++;b[u][v]++;b[v][u]++;N=max(N,max(u,v));}//輸出鄰接矩陣cout<<"有向圖:"<<endl;for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)printf("%d%c",a[i][j]," \n"[j==N]);cout<<"無向圖:"<<endl;for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)printf("%d%c",b[i][j]," \n"[j==N]);//判斷連通性cout<<"圖連通性:"<<(check(b,N)?"YES":"NO")<<endl;cout<<"請輸入結點兩兩之間長度:"<<endl;cin>>m;cout<<"有向圖結點兩兩之間長度為"<<m<<"的數量:"<<cntm(a,N,m)<<endl;cout<<"無向圖結點兩兩之間長度為"<<m<<"的數量:"<<cntm(b,N,m)<<endl;memset(vis,0,sizeof(vis));cout<<"圖的連通分支:"<<endl;int cnt=0;for(int i=1;i<=N;i++)if(!vis[i])dfs(b,i,++cnt,N);for(int i=1;i<=cnt;i++){cout<<"Case "<<i<<": ";for(int j=1;j<=N;j++){if(vis[j]==i)cout<<j<<" ";}cout<<endl;}//cout << "Hello world!" << endl;return 0; }

    總結

    以上是生活随笔為你收集整理的离散数学实验题目-图的全部內容,希望文章能夠幫你解決所遇到的問題。

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