數(shù)學(xué)建模 校車安排問(wèn)題_第1頁(yè)
數(shù)學(xué)建模 校車安排問(wèn)題_第2頁(yè)
數(shù)學(xué)建模 校車安排問(wèn)題_第3頁(yè)
數(shù)學(xué)建模 校車安排問(wèn)題_第4頁(yè)
數(shù)學(xué)建模 校車安排問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)學(xué)建模校車安排問(wèn)題最近因?yàn)閿?shù)學(xué)建模,要做模擬題,順便練習(xí)一下代碼水平下面是模擬題許多學(xué)校都建有新校區(qū),常常需要將老校區(qū)的教師和工作人員用校車送到新校區(qū)。由于每天到新校區(qū)的教師和工作人員很多,往往需要安排許多車輛。如何有效的安排車輛及讓教師和工作人員盡量滿意是個(gè)十分重要的問(wèn)題?,F(xiàn)有如下問(wèn)題請(qǐng)你設(shè)計(jì)解決。假設(shè)老校區(qū)的教師和工作人員分布在50個(gè)區(qū),各區(qū)的距離見(jiàn)表1。各區(qū)人員分布見(jiàn)表2。問(wèn)題1如要建立個(gè)乘車點(diǎn),為使各區(qū)人員到最近乘車點(diǎn)的距離最小,該將校車乘車點(diǎn)應(yīng)建立在哪個(gè)點(diǎn)。建立一般模型,并給出時(shí)的結(jié)果。很明顯,這是一個(gè)求最短路徑的問(wèn)題,先要求每個(gè)點(diǎn)到其他點(diǎn)的最短路徑,設(shè)sum[n,m]為從n到m的最短路徑,因?yàn)橐O(shè)置乘車點(diǎn),先假設(shè)設(shè)立一個(gè)乘車點(diǎn)n,就要把所有的sum[i,n](i屬于1到50),加上算出總的乘車距離,循環(huán)50次,找到總乘車距離最短的乘車點(diǎn),就是所求,以此類推,當(dāng)設(shè)立2個(gè)乘車點(diǎn),就是排列組合,循環(huán)50*50次,每個(gè)點(diǎn)要用判斷條件確定去哪個(gè)乘車點(diǎn)的距離更短,來(lái)確定這個(gè)點(diǎn)到乘車點(diǎn)的距離,算完后再加起來(lái),總距離最短的兩個(gè)點(diǎn)就是所求。數(shù)學(xué)建模有一點(diǎn)不同的是,數(shù)據(jù)是txt文本的,要用一個(gè)二維數(shù)組儲(chǔ)存起來(lái),再進(jìn)行運(yùn)算,結(jié)果,再輸入一個(gè)txt文本中,當(dāng)然這個(gè)難不倒我,用C語(yǔ)言的IO接口就能解決問(wèn)題,下面是代碼。利用dijitesla算法計(jì)算最短路徑的代碼#include<windows.h>#include<stdio.h>#include<stdbool.h>constintmaxnum=51;///最大的節(jié)點(diǎn)數(shù)constsize_tmaxint=-1;///如果兩點(diǎn)沒(méi)有路徑,則設(shè)置為此較大的值intdist[maxnum];///存儲(chǔ)原點(diǎn)到各點(diǎn)的最短距離intc[maxnum][maxnum];///存儲(chǔ)圖的鄰接矩陣intn,line;///節(jié)點(diǎn)數(shù),和路徑數(shù)voiddijikstr(intn,intv,size_tdist2[maxnum],intc[maxnum][maxnum]){bools[maxnum];///標(biāo)記這個(gè)點(diǎn)是否已求出最短的路徑。size_tdist[51];for(inti=1;i<=n;i++){///初始化dist[]和s[]dist[i]=c[v][i];s[i]=0;}///原點(diǎn)s[v]=1;dist[v]=0;///原點(diǎn)不用再進(jìn)行計(jì)算,所以從2開始for(inti=0;i<n;i++)//節(jié)點(diǎn)的個(gè)數(shù){size_ttemp=-1;intu=v;//u為初始點(diǎn),每次循環(huán)完都要初始化。for(intj=1;j<=n;j++)if((!s[j])&&dist[j]<temp)//沒(méi)有到最小距離{///找出距離最短的直接路徑u=j;temp=dist[j];}s[u]=1;//將直接的最短路徑設(shè)為找到。///更新剩余的點(diǎn)與原點(diǎn)的距離(dist)for(intj=1;j<=n;j++)if(!s[j]&&c[u][j]!=maxint){intnewdist=dist[u]+c[u][j];//以第u個(gè)點(diǎn)為跳板,找到源點(diǎn)到第j個(gè)點(diǎn)的最短距離。if(dist[j]>newdist){dist[j]=newdist;}}}//for(inti=1;i<=50;i++)//printf("第%u個(gè)點(diǎn)到第%u個(gè)點(diǎn)的距離為%u\n",v,i,dist[i]);FILE*fp;if((fp=fopen("final_table.txt","a"))==NULL){printf("Fileopenfailed!\n");}for(inti=1;i<=50;i++){fprintf(fp,"%u",dist[i]);if(i==50)fprintf(fp,"|\n");}}intmain({inti=0;intj=0;size_ttable[50][50]={-1};//用來(lái)儲(chǔ)存表的信息的for(i=0;i<50;i++)for(j=0;j<50;j++){table[i][j]=-1;}FILE*fp;if((fp=fopen("table.txt","r"))==NULL){printf("Fileopenfailed!\n");return1;}intjudge=0;//用來(lái)判斷當(dāng)前的數(shù)屬于行列,或者是距離inti_2;//行intj_2;//列for(i=0;i<50;i++)//讀取for(j=0;j<50;j++){judge++;if(judge==4)judge=0;if(judge==1)fscanf(fp,"%u",&i_2);if(judge==2)fscanf(fp,"%u",&j_2);if(judge==3){fscanf(fp,"%u",&table[i_2-1][j_2-1]);//因?yàn)轭}中沒(méi)有第0個(gè)區(qū)域,但數(shù)組編號(hào)是從0開始的,所以要-1.table[j_2-1][i_2-1]=table[i_2-1][j_2-1];}}for(i=0;i<50;i++)for(j=0;j<50;j++){if(i==j)table[i][j]=0;//一個(gè)區(qū)域到它本身的距離為0.}FILE*fp2=fopen("table_new.txt","w");for(i=0;i<50;i++)for(j=0;j<50;j++){fprintf(fp2,"%u",table[i][j]);if(j==49)fprintf(fp2,"|",);}inttable_2[51][51];for(j=0;j<50;j++){table_2[j][0]=0;}for(i=0;i<50;i++)for(j=0;j<50;j++){table_2[i+1][j+1]=table[i][j];}for(intm=1;m<=50;m++){size_tdist[50]={0};dijikstr(50,m,dist,table_2);}}。說(shuō)明一下,table.txt裝著附錄表的信息,new_table是是能夠循環(huán)傳入二維數(shù)組的數(shù)據(jù),final_table為求出的每個(gè)點(diǎn)到其他點(diǎn)的最短路徑#include"pch.h"#define_CRT_SECURE_NO_WARNINGS#include<Windows.h>#include<stdio.h>size_tsum=-1;size_tnew_sum;intflag1;intflag2;intmain({inttable_3[50][50]={0};FILE*fp;if((fp=fopen("final_table.txt","r"))==NULL){printf("Fileopenfailed!\n");return1;}for(inti=0;i<50;i++)for(intj=0;j<50;j++){fscanf(fp,"%u",&table_3[i][j]);}for(inti=0;i<50;i++)//當(dāng)n=2時(shí),i和j分別為第1,第2個(gè)選定的區(qū)域for(intj=0;j<50;j++){if(i!=j){new_sum=0;for(intk=0;k<50;k++)//其他50個(gè)地區(qū)的去向{if(table_3[k][i]>table_3[k][j])new_sum+=table_3[k][j];if(table_3[k][i]<=table_3[k][j])new_sum+=table_3[k][i];}if(sum>new_sum)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論