/**//*标题:<<系统设计师>>应试编程实例-[递推算法程序设计]作者:成晓旭时间:2002年09月14日(18:20:00-20:18:00)实现“装箱”问题的贪婪算法实现函数时间:2002年09月14日(22:00:00-23:18:00)实现“装箱”问题的贪婪算法实现函数时间:2002年09月14日(18:20:38-22:18:00)实现“人民币找零”问题的贪婪法解决算法*/#include"stdio.h"#include"stdlib.h"//:============================“马的遍历”问题的贪婪法解决算法===========================intdelta_i[]=...{2,1,-1,-2,-2,-1,1,2};intdelta_j[]=...{1,2,2,1,-1,-2,-2,-1};intboard[8][8];//棋盘数组(board[i,j]表示:马经过位置[i行,j列]时的步骤)//求(i,j)的出口数,和各出口号于array[],start是顺序选择着法的开始序号intExit_Number(inti,intj,intstart,intarray[])...{inta,b,k,count;for(count=k=0;k<8;k++)...{a=i+delta_i[(start+k)%8];b=j+delta_j[(start+k)%8];if((a>=0&&a<8)&&(b>=0&&b<8)&&board[a][b]==0)array[count++]=(start+k)%8;}return(count);//返回出口数}//选下一出口,start是顺序选择着法的开始序号intSelect_NextExit(inti,intj,intstart)...{intmin_nexit,nexit,temp,a[8],b[8],k,result;nexit=Exit_Number(i,j,start,a);//确定(i,j)的出口个数if(nexit==0)return(-1);//没有出口for(min_nexit=9,k=0;k<nexit;k++)...{//逐一考察各个出口temp=Exit_Number(i+delta_i[a[k]],j+delta_j[a[k]],start,b);if(temp<min_nexit)...{min_nexit=temp;result=a[k];}}return(result);}//“马的遍历”问题主函数voidJourney_Horse()...{intx,y,i,j,start,step=0,order;for(x=0;x<8;x++)...{for(y=0;y<8;y++)...{start=0;//从0号着法开始顺序检查do...{for(i=0;i<8;i++)for(j=0;j<8;j++)board[i][j]=0;//清棋盘board[x][y]=1;i=x;j=y;for(step=2;step<=64;step++)...{if((order=Select_NextExit(i,j,start))==-1)break;//没有出口i=i+delta_i[order];//前进一步j=j+delta_j[order];board[i][j]=step;//马在第step步时将经过位置[i行,j列]}if(step>64)break;//走出棋盘了,自然应该结束循环start++;//最先检查的着法序号增1}while(step<=64);//显示当前着法的结果printf("x-start=[%d],y-start=[%d],start=[%d]: ",x,y,start);for(i=0;i<8;i++)...{for(j=0;j<8;j++)printf("%4d",board[i][j]);printf(" ");}scanf("%*c");//输入回车,找下一个起点的解}}}//:============================“马的遍历”问题的贪婪法解决算法===========================intmain(intargc,char*argv[])...{//Encase_Box();//Journey_Horse();Run_Give_Change();printf(" 应用程序运行结束! ");return0;}