中国矿业大学计算机学院实验,中国矿业大学计算机学院算法设计与分析实验报告...

算法实验报告 实验一 用分治法实现元素选择 实验代码: #include using namespace std; int main() { int a[100],n,x; int BinarySearch(int a[],const int coutn; couta[i]; } coutx; if(BinarySearch(a,x,n)!=-1) couta[middle]) left=middle+1; else right=middle-1; } return -1; } 实验效果图: 实验二 用动态规划法求解 0/1 背包问题 实验代码: #include using namespace std; int main() { void Knapsack(int *v,int *w,int c,int n,int **m); void Traceback(int **m,int *w,int c,int n,int *x); int v[100],w[100],n,c,**m,x[100],i; m=new int *[100]; for(i=0;in; coutc; coutv[i]; coutw[i]; Knapsack(v,w,c,n,m); Traceback(m,w,c,n,x); coutb) return b; else return a; } int max(int a,int b) { if(ab) return a; else return b; } void Knapsack(int *v,int *w,int c,int n,int **m) { int i,j; int jMax=min(w[n]-1,c); for(j=0;j1;i--) { jMax=min(w[i]-1,c); for(j=0;j=w[1]) m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]); } void Traceback(int **m,int *w,int c,int n,int *x) { for(int i=1;i #define inf 10000 #define max 50 void prim(int g[max][max],int n) { int lowcost[max],closest[max]; int i,j,k,min; bool s[max]; s[1]=true; for(i=2;i=1;i--) for(j=i-1;j=1;j--) g[i][j]=g[j][i]; printf(“最小生成树为:\n“); prim(g,n); } 实验效果图: 实验四 用回溯法求解跳马问题 实验代码: //起始位置:0,0 #include using namespace std; int M,N; int map[100][100]; int count=0; //记录马共跳的步数 int countnum=0; //用于统计走法种数 int direction[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};//马可能前进的 8 个方向 int flag=0; void print_map() { int t=0; for(int i=0;i=0 M=N; for(int k=0;k #include #include int tile=0; //定义全局变量 tile 表示 L 型骨牌编号 int **chessarr; //定义全局变量 chessarr 表示棋盘数组 void chessboard(int row0,int col0,int size,int sprow,int spcol); // 棋盘覆盖函数 // row0,col0 为棋盘左上角位置,sprow,spcol 为特殊方格位置 // size 为棋盘规模 void chessboard(int row0,int col0,int size,int sprow,int spcol) //棋盘覆盖函数 { if(size==1) return; //如果棋盘规模=1,返回 int s=size/2; //分割棋盘 int t=++tile; //L 型骨牌编号加 1 //处理左上角子棋盘 if(sprow = col0+s) chessboard(row0,col0+s,s,sprow,spcol); else { chessarr[row0+s-1][col0+s]=t; chessboard(row0,col0+s,s,row0+s-1,col0+s); } //处理左下角子棋盘 if(sprow = row0+s else { chessarr[row0+s][col0+s]=t; chessboard(row0+s,col0+s,s,row0+s,col0+s); } } void main() { int k,x,y; //阶数及特殊点位置 int i,j,n; //棋盘规模为 n*n coutk; coutxy; for (i=0,n=1;i using namespace std; int main() {void hanoi(int,char,char,char); int m;cinm;hanoi(m,'A','B','C'); return 0; } void hanoi(int n,char a,char b,char c) {void move(int,char,char); if(n==1)move(n,a,b); else{hanoi(n-1,a,c,b); move(n,a,b); hanoi(n-1,c,b,a);}} void move(int n,char x,char y) {coutn““xyendl;} 实验效果图:

展开阅读全文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值