栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[NEFU算法设计与分析] 代码汇总

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[NEFU算法设计与分析] 代码汇总

[NEFU 算法设计与分析]算法代码汇总

PPT 看代码太难受了,重新格式化和整理,5月22日前完成更新

  • 只包含 PPT 完整给出的算法 & 实验做的算法,没给的就没整理了
  • 对标软工的要求(应该比计科和大数据简单)
  • 主要进行了格式优化增加注释,非片段可运行
递归与分支策略 求阶乘
#include
using namespace std;
int fac(int n)
{
    if (n == 0)
        return 1;
    else
        return n * fac(n - 1);
}

int main() {
	cout << fac(10);
	return 0;
}
求二叉树子节点数
#include 
using namespace std;


typedef struct node {
	char data;
	struct node *lchild, *rchild;
} BinNode, *BinTree;

int LeafCount(const BinTree &T) {
	if (!T) {
		return 0;
	} else if (T->lchild == NULL && T->rchild == NULL) {
		return 1;
	} else {
		return LeafCount(T->lchild) + LeafCount(T->rchild);
	}
}


void CreateBinTree(BinTree &T){
    char ch;cin>>ch;
    if(ch=='@')T=NULL;
    else{
        T=new BinNode;
        T->data=ch;
        CreateBinTree(T->lchild);
        CreateBinTree(T->rchild);
    }
}




int main() {
	BinTree T = new BinNode;
	CreateBinTree(T);	
	cout << LeafCount(T);
	return 0;
}
汉诺塔
在这里插入代码片
排列
#include 
using namespace std;

void Perm(int list[], int k, int m)
{
    if (k == m) {
        for (int i = 0; i <= m; i++)
            cout << list[i];
        cout << endl;
    } else
        for (int i = k; i <= m; i++) {
            swap(list[k], list[i]);
            Perm(list, k + 1, m);
            swap(list[k], list[i]);
        }
}


int main() {
	int list[4] = {1,2,3,4};
	Perm(list,0,3);
	return 0;	
}
棋盘覆盖问题
#include 
using namespace std;

const int N = 3005;
int board[N][N];

int tile;

void chessBoard(int tr, int tc, int dr, int dc, int size) {
    if (size == 1) {
        return;
	}

    int t = tile++; 									// L型骨牌号
    int s = size / 2; 									// 分割棋盘
    
    if (dr < tr + s && dc < tc + s) {					// 覆盖左上角子棋盘
        chessBoard(tr, tc, dr, dc, s); 		        	// 特殊方格在此棋盘中
	} else { 											// 此棋盘中无特殊方格
        board[tr + s - 1][tc + s - 1] = t;  			// 用 t 号L型骨牌覆盖右下角
        chessBoard(tr, tc, tr + s - 1, tc + s - 1, s);  // 覆盖其余方格
    }

    if (dr < tr + s && dc >= tc + s) {	    			// 覆盖右上角子棋盘
        chessBoard(tr, tc + s, dr, dc, s);				// 特殊方格在此棋盘中
	} else { 											// 此棋盘中无特殊方格
        board[tr + s - 1][tc + s] = t;					// 用 t 号L型骨牌覆盖左下角
        chessBoard(tr, tc + s, tr + s - 1, tc + s, s);  // 覆盖其余方格
    }

    if (dr >= tr + s && dc < tc + s) { 					// 覆盖左下角子棋盘
        chessBoard(tr + s, tc, dr, dc, s);				// 特殊方格在此棋盘中
	} else { 											// 用 t 号L型骨牌覆盖左下角
        board[tr + s][tc + s - 1] = t;					// 用 t 号L型骨牌覆盖右上角
        chessBoard(tr + s, tc, tr + s, tc + s - 1, s);	// 覆盖其余方格
    }

    if (dr >= tr + s && dc >= tc + s) {				    // 覆盖右下角子棋盘			
        chessBoard(tr + s, tc + s, dr, dc, s);			// 特殊方格在此棋盘中
	} else { 
        board[tr + s][tc + s] = t;						// 用 t 号L型骨牌覆盖左上角
        chessBoard(tr + s, tc + s, tr + s, tc + s, s);  // 覆盖其余方格
    }
}

int k,dr,dc,size;

int main() {
	while(cin >> k) {		//k表示阶数
		size = (1<> dr >> dc;
		
		chessBoard(1,1,dr,dc,size);

		for(int i = 1; i <= size; ++i) {
			for(int j = 1; j <=  size; ++j) {
				cout< 
合并排序 
#include 
using namespace std;
typedef int Type;

Type b[105];//临时存储合并结果

void Merge(Type a[], Type b[], int left, int mid, int right) {	//合并两个有序数组
	int p = left, q = mid+1;
	int pos = 0;
	while(p <= mid && q <= right) {
		if(a[p] < a[q]) {
			b[pos++] = a[p++];
		} else {
			b[pos++] = a[q++];
		}
	}

	while(p <= mid) b[pos++] = a[p++];
	while(q <= right) b[pos++] = a[q++];
}

void copy(Type a[], Type b[],int left,int right) {
	for(int i = left; i <= right; ++i) {
		a[i] = b[i-left];
	}
}

void MergeSort(Type a[], int left, int right) {
    if (left < right) { //至少有2个元素
        int i = (left + right) / 2; //取中点
        MergeSort(a, left, i);
        MergeSort(a, i + 1, right);
        Merge(a, b, left, i, right); //合并到数组b
        copy(a, b, left, right); //复制回数组a
    }
}

int main() {
	Type a[] = {13,1,3,7,10,2};
	MergeSort(a,0,5);
	for(int i = 0; i < 6; ++i) {
		cout << a[i] << " ";
	}
	return 0;
}
快速排序
在这里插入代码片
循环赛日程表
在这里插入代码片
动态规划算法 矩阵连乘问题 最大子段和 最长公共子序列 凸多边形最优三角剖分 背包问题 贪心算法 活动安排问题 最优装载问题 哈夫曼编码 回溯法 01背包问题 图的着色问题 旅行商问题 分支界限 装载问题 布线问题 01背包问题 最大团问题 旅行售货员问题
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号