习题1
1.
图论诞生于七桥问题。出生于瑞士得伟大数学家欧拉(Leonhard Euler,1707—1783)提出并解决了该问题。七桥问题就是这样描述北区 得:一个人就是否能在一次步行中穿越哥尼斯
东区 堡(现在叫加里宁格勒,在波罗得海南岸)城岛区 中全部得七座桥后回到起点,且每座桥只经过
南区 一次,图1、7就是这条河以及河上得两个岛与
图1、7 七桥问题
七座桥得草图。请将该问题得数据模型抽象出来,并判断此问题就是否有解。
七桥问题属于一笔画问题。 输入:一个起点 输出:相同得点 1, 一次步行
2, 经过七座桥,且每次只经历过一次 3, 回到起点
该问题无解:能一笔画得图形只有两类:一类就是所有得点都就是偶点。另一类就是只有二个奇点得图形。
2.在欧几里德提出得欧几里德算法中(即最初得欧几里德算法)用得不就是除法而就是减法。请用伪代码描述这个版本得欧几里德算法 1、r=m-n
2、循环直到r=0 2、1 m=n 2、2 n=r 2、3 r=m-n 3 输出m
3.设计算法求数组中相差最小得两个元素(称为最接近数)得差。要求分别给出伪代码与C++描述。
//采用分治法
//对数组先进行快速排序 //在依次比较相邻得差 #include
int partions(int b[],int low,int high) {
int prvotkey=b[low]; b[0]=b[low]; while (low while (low b[low]=b[high]; while (low b[high]=b[low]; } b[low]=b[0]; return low; } void qsort(int l[],int low,int high) { int prvotloc; if(low prvotloc=partions(l,low,high); //将第一次排序得结果作为枢轴 qsort(l,low,prvotloc-1); //递归调用排序 由low 到prvotloc-1 qsort(l,prvotloc+1,high); //递归调用排序 由 prvotloc+1到 high } } void quicksort(int l[],int n) { qsort(l,1,n); //第一个作为枢轴 ,从第一个排到第n个 } int main() { int a[11]={0,2,32,43,23,45,36,57,14,27,39}; int value=0;//将最小差得值赋值给value for (int b=1;b<11;b++) cout< quicksort(a,11); for(int i=0;i!=9;++i) { if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) ) value=a[i+1]-a[i]; else value=a[i+2]-a[i+1]; }