HNU数据结构和算法复习1

Happy birthday to java!
白驹过隙,期末将至。今天做往年题的时候有个mergesort写得不是很利索,(代码填空,看得出来老师已经很尽力送分了)主要是再明确一下mergesort的逻辑和写法。上代码:

void mergesort(Elem A[],Elem temp[],int left,int right) {//此处right和left指的是下标
/************************************划分子串*******************************************/
if(right==left) return;//左边等于右边则返回,也就是每个子串都只剩下一个元素了
int mid=(left+right)/2;
mergesort(A,temp,left,mid);
mergesort(A,temp,mid+1,right);//这里假装已经把左半部分和右半部分整理好了,下面进行的都是对于整理好的子串的合并
/**********************************子串合并*********************************************/
int i1=left;
int i2=right;
for(int i=left;i<right;i++)
	temp[i]=A[i];//copy
for(int curr=left;curr<right;curr++) {
	if(i1==mid+1)  //left exhausted 左子串用完咯
		A[curr]=temp[i1++];
	if(i2==right) //right exhausted 右子串用完咯
		A[curr]=temp[i2++];
	else if(temp[i1]>temp[i2]) //正常排序,谁大谁先(排降序)
		A[curr]=temp[i1++];
	else A[curr]=temp[i2++];
	}
}

其实今天又写了一遍dijkstra,只是dijkstra算法敲得我快吐了(计网,算法,数据结构,离散)都敲,不想再写了,跳过,下一个。
整理一下算法分析的代码。
分支限界法(可可爱爱的小刘老师给打出来了,当然要再敲一遍啦~)
先来一个简单的,布线问题

Postion here,nbr;//结构体记录行列位置,为什么用结构体不用二维数组呢,显然,要push到队列里面去嘛
here.row=start.row;
here.col=start.col;//init
grid[start.row][start.col]=0;//这里是为了算结点的度,度是什么,就是离源点之后,走的步数
queue<Position> Q;//活结点队列
/*******************************************/
do{
for(int i=0;i<MunOfNbrs;i++) {
	nbr.row=here.row+offset[i].row;
	nbr.col=here.col+offset[i].col;
	if(grid[nbr.row][nbr.col]==-1) //未标记
		grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;
	if((nbr.row==finish.row)&&(nbr.col==finish.col)) break;//完成布线
	Q.push(nbr);
	}
	/*********************以上为一次活结点扩展,向四个方向各走一步,并在grid图上标注出来,然后入队************************/
	if((nbr.row==finish.row)&&(nbr.col==finish.col)) break;//完成布线
	if(Q.empty()) return false;//队列为空且未达目的,无解
	//取下一个扩展结点
	here=Q.front();
	Q.pop();
	indexcount++;
	/************************把刚才入队的结点一个一个取出来,检验是否为目标结点,或者是否该剪除****************************/
}while(true);

好累啊好累啊~计网要考试了,最近在学计网,所以算法更新有点慢,不过不要紧,计网很快考完就该大学特学算法了。(毕竟涉及两三门课呢)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值