




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
voidqsort(intx,inty)待排序的數據存放在a[1]..a[n]{intintm=a[(x+y)>>1取中間的那個位置的值{while(a[h]<m)h++;//比中間那個位置的值小,循環直到找一個比中間那個值大的whilea[r]>m)r比中間那個位置的值大,循環直到找一個比中間那個值小的{inttemp=a[h];//如果此時h<=ra[h]a[r]h++;r}}if(r>x)qsort(x,r);//注意此處,尾指針跑到前半部分了if(h<y)qsort(h,y);注意此處,頭指針跑到后半部分了})//{for(inti=1;i<n;i++)//控制循環(冒泡)的次數,n個數,需要n-1for(intj=1;j<=n-i;jif(a[j]<a[j+1]){int})//{for(inti=1;i<n;i++)//控制循環(冒泡)的次數,n個數,需要n-1for(intj=n-i;j>=1;jif(a[j]<a[j+1]){int}for(inti=1;i<=n;i++)//讀入n個數{intatong[a]++;}//1for(inti=1;i<=cmax;i++){if(tong[i]>0)0itong[i]iwhile(tong[i]!=0)cout<<i<<’}}四、合(歸)voidmerge(intl,intm,intr)//合并[l,m]和[m+1,r]intb[101];//B,使兩個有序的子區間合并成一個有序的區間,b數組inth=l;t=m+1;//讓h指向第一個區間的第一個元素,twhile((h<=m)&&(t<=r))//在指針h和t沒有到區間尾時,把兩個區間的元素抄在新數組 if(a[h]<a[t]){b[k]=a[h];h++;} else{b[k]=a[t];t++;}//抄第二個區間元素到新數組}while(h<=m){k++;b[k]=a[h];h++;}//如果第一個區間沒有抄結束,把剩下的抄在新數while(t<=r){k++;b[k]=a[t];t++;}//如果第二個區間沒有抄結束,把剩下的抄在新數組for(into=1;o<=k;o++)//把新數組中的元素,再抄回原來的區間,這兩個連續的區間變a[l+o-}voidmergesort(intx,inty)//對區間[x,y]{intmid;if(x>=y)return;}intfind(intx,inty,intm在[x,y]m{inthead,tail,mid;if(a[mid]==m)returnmid;//如果中間元素值為mif(m>a[mid])//mreturnreturnfind(head,mid-}usingnamespacestd;intmain(){stringinta[250],b[250],len; inti; a[0]=str1.length();//for(i=1;i<=a[0];i++)//a for(i=1;i<=b[0];i++)//把第二個字符串中的每一位轉換為整數,存放在數組B for(i=1;i<=len;i++)//做按位加法,同時處理進位{} //下面是去掉最的0,然后輸出。while((a[len]==0)&&(len>1))len--;return0;}usingnamespacestd;intcompare(strings1,strings2);intmain(){stringinta[250],b[250],len;inti;if((compare(str1,str2))==0)//{if(a[i]<0){a[i+1]--while((a[a[0]]==0)&&(a[0]>1))a[0]--;}{cout<<'-';//小于就輸出負號for(i=1;i<=b[0];i++)//做按位減,大的減小的if(b[i]<0){b[i+1]--while((b[b[0]]==0)&&(b[0]>1))b[0]--;}return}intcompare(strings1,strings2)//比較字符串(兩個數)0,1。{if(s1.length()>s2.lengthreturn0;//for(inti=0;i<=s1.length();i++)//{if(s1[i]>s2[i])returnif(s1[i]<s2[i])return}return0;//0}usingnamespacestd;intmain(){stringint inti,j;for(i=1;i<=a[0];i++)//做按位乘法同時處理進位,注意循環內語句的寫法。{}len=a[0]+b[0]+1;//去掉最的0,然后輸出while((c[len]==0)&&(len>1len--;//len>1??return0;}usingnamespacestd;voidnum1(ints[],stringInt{stringstr1,str2;intlen;num1(a,str1把str14afor(inti=1;i<=a[0];i+作按位乘法并處理進位,此處是萬進制進位for(intj=1;j<=b[0];j++){}while((c[len]==0)&&(len>1))len--;//去掉的0,并輸出最{if(c[i]<1000)if(c[i]<100)if(c[i]<10)}return0;}中 int--)//{if(count%4==0){s[k]+=(st1[i]-‘0’)*1000;if(i!=0)if(count%4==1)s[k]=(st1[i]-if(count%4==2)s[k]+=(st1[i]-if(count%4==3)s[k]+=(st1[i]-‘0’)*100;}//}九、高精度除法(沒講voidmaketable(intx)//Xprim,prim[i]0i1表示{prim[0]=1;prim[1]=1;prim[2]=0;//X以內的質數表for(inti=2;i<=x;i++)if{intj=2*i;}}voiddfs(intx)\\{cout<<x<<‘‘;\\x頂visited[x]=1;\\作已的標}voidbfs(voidG,n1..n。注:圖不一定是連{//使用輔助隊列Q和標記數組visitedfor(v=1;v<=n;v++)visited[v]=0;//標記數組初始化for(v=1;v<=n;v++)if(visited[v]==0 inth=1,r=1; //qvisited[v]=1;//頂點v,作標記cout<<v<<‘‘;//頂點vq[r]=v;//v入隊列while(h<=r)//當隊列非空時循環{inttmp=q[h];//tmpfor(intj=1;j<=n;j++)visited[j]=1;對j作標cout<<j<<‘‘;jrq[r]=jj}//end-}//end-}voidpreorder(intx)//{if(x==0)}voidinorder(intx)//{if(x==0)}voidreorder(intx)//{if(x==0)}十六、voidhaff(void)//構建{for(inti=n+1;i<=2*n-1;i+依次生成n-1{intl=fmin(i-1);la[i].lchild=l;//li的左孩子a[l].father=i;//liintr=fmin(i-1ra[i].rchild=r把li的右孩子a[r].father=i;//把ri//}}intfmin(intk)//1K{intfor(intif((a[mins].da>a[s].da)&&(a[s].father==0))a[s].father=0,說明這個結點還不是 return}voidinorder(intx)//遞歸生成編{){if(a[a[x].father].lchild==x)if(a[a[x].father].rchild==x)a[x].code=a[a[x].father].code+'1';if(a[x].lchild!=0)inorder(a[x].lchild);//遞歸生成左子樹if(a[x].rchild!=0)inorder(a[x].rchild);//遞歸生成右子樹}intgetfather(intx)//Xreturn}intgetfather(intx)//遞歸求X{if(x==father[x])returnelsereturn}{intwhile(x!=father[x])//從X結點沿Xfather[x]=p;//XP}return}intgetfather(intx)//遞歸求X{if(x==father[x])returnx;else{inttemp=getfather(father[x]);return}}voidmerge(intx,inty)//合并x,y{intx1=getfather(x);//取得Xif(x1!=x2)father[x1]=x2X,Y兩個結})//(}forinti=1;i<=n-1;i++)//n-1{intfor(intj=i+1;j<=n-1;j++)//ii+1至n-1{edge}for(inti=1;i<=n-1;i++)//求最小生成樹的值}i+1n-1條邊到已經生成的樹中最小距離時(上面代碼中加粗的部分)elist[j].from=elist[i].to;語句,即在更新權值Primevoiddijkstra(intx)//x{memset(vis,0,sizeof(vis初始化,vis[i]=0表示源點到結點i//for(inti=1;i<=n;i++) {}for(inti=1;i<=n-1;i++)//對于nxn-1{intm=big;//虛擬一個最大的數big= intk=x;for(intj=1;j<=n;j++)//在未求出的結點中找一個源點到其距離最小的點{}vis[k]=1;//k=Xfor(intj=1;j<=n;j++)//X{dis[j]=dis[k]+g[k][j];//pre[j]=k;//}}}說明:dis[i]xi的最短距離,pre[i]i結點的前趨結點。二十、Kruscal算法voidqsort(intx,inty)//{inth=x,r=y,m=elist[(h+r)>>1].w;{while(elist[h].w<m)h++;while(elist[r].w>m)r--;}if(x<r)if(h<y)}{if(x==father[x])returnx;else{intf=getfather(father[x]);return}}voidmerge(intx,inty)//合并x,y結點,在此題中的x,yvoid{intfor(int{intx1=getfather(elist[i].from);//i條邊的起點所在的樹的根intx2=getfather(elist[i].to);//i條邊的終點所在的樹的根{sum++;merge(x1,x2);ans+=elist[i].w;}//不在同一個集合,合并,即第i}cout<<"Impossible"<<endl;t條邊中無法確定n-1}Krsl算法。對于島國問題,我們就要選擇此算法,如果用Prm個點的數據,顯然在空間上是無法的。voidfloyed(voida[i][j]ij的最短路徑長度,初始時值為<I,J>{for(intk=1;k<=n;k+Kf[i][j]最短路徑長度,KDPfor(inti=1;i<=n;i+i,jiJDPfor(intif(a[i][j]>a[i][k]+a[k][ja[i][j]=a[i][k]+a[k][j];//這是決策,加和不加中間點,取最}FLOYED算法,可寫出iJ是否連通的算法。二十二、01f[i][j]=max{f[i-1][j],f[i-1][j-w[i]]+c[i]}。f[i][j]i個物品,在背包載jf[n][v]f[0][s]=0,s=0,1,…,v。{}{))}了階段這一維,同時在枚舉狀態時,為了保證結果的正確性,枚舉的順序只能是v0,而不能是0到v。大家細想一下為什么?就是保證在求第i階段j狀態時,f[j-w[i]]為第i-1j>=w
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年水利水電工程專題復習試題及答案
- 2025年環境監測物聯網在空氣質量監控中的技術應用分析報告
- 2025年特色農產品加工車間節能改造方案評估報告
- 建筑物設計綜合考慮試題及答案
- 2025年工程經濟理論知識梳理試題及答案
- 如何構建有效的公關傳播結構試題及答案
- 行政管理中的利益協調試題及答案
- 年產2噸肝素鈉生產建設項目可行性研究報告(模板)
- 行政管理學知識與社會需求的結合及試題及答案
- 工程經濟項目治理的關鍵試題及答案
- 客戶退貨處理流程圖
- 《國家電網公司十八項電網反事故措施(試行)》實施細則
- 中國民主同盟入盟申請表(樣表)
- 畢業設計(論文)-軸向柱塞泵設計(含全套CAD圖紙)
- 公安機關通用告知書模板
- 國家標準色卡電子版(WORD版圖片)
- 山東省初中學業水平考試信息技術學科命題要求
- 年貼現值系數表
- 《呼吸機的使用管理》PPT課件.ppt
- 兒童相聲劇本43286
- 國民收入核算
評論
0/150
提交評論