自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 n皇后问题递归回溯法

#include<stdio.h>int a[100]={0};int n;int cnt=0;bool check(int x,int y)//检查坐标为(x,y)是否可以放置皇后,即是否与前面的皇后有冲突 { for(int i=1;i<x;i++)//对前x-1行进行检查看在(x,y)的列和对角线是否存在皇后 { if(a[i]==y) return false; if(a[i]+i==x+y) return false; if(a[i]-i==y-x

2022-04-08 16:46:25 134

原创 合并排序分治思想

#include<stdio.h>void merging(int a[],int b[],int len_a,int len_b){ int c[len_a+len_b]; int i,j,k; i=j=k=0; while(i<len_a&&j<len_b) { if(a[i]<b[j]) c[k++]=a[i++]; else c[k++]=b[j++]; } while(i<len_a) c[k++

2022-03-25 21:41:42 1533

原创 活动安排问题贪心算法

#include<stdio.h>struct Active { int size;//活动序号 int start;//开始时间 int end;//结束时间 int state;//状态};void select(Active a[], int n){ for (int i = 0; i < n - 1; i++)//冒泡排序按照结束时间从早到晚 for (int j = 0; j < n - i - 1; j++) { if (a[j + 1

2022-03-24 22:30:38 385

原创 最大子序列和动态规划

#include<stdio.h>void Maxsum(int a[],int n){ int sum=0,b=0; int start=0,end=0; for(int i=0;i<n;i++) { if(b<0)//b代表的是0-i-1内的任意元素到i-1的最大子序列和 { b=a[i];//若到i-1的最大子序列和为负数,则到i的最大子序列和为i本身值较大 start=i; } else b=b+a[i]; if(b>sum) {

2022-03-14 10:20:07 1043

原创 最大子序列问题递归与动态规划

#include<stdio.h>#include<stdlib.h>int Lcs(int n,int m,int a[], int b[], int c[100][100]){ if (n== 0 || m == 0) return 0; if (a[n] == b[m]) { return Lcs(n - 1, m - 1, a, b, c) + 1; } else return Lcs(n - 1, m, a, b, c) &..

2022-03-12 17:08:31 1190

原创 KMP算法-next数组

#include<stdio.h>#include<stdlib.h>#include<string.h>void getNext(char T[], int next[]){ int i = 0; int j = -1; next[0] = -1; while (i < strlen(T)) { if (j==-1||T[i] == T[j]) { i++; j++; next[i] = j; } else

2022-03-03 15:39:13 50

原创 字符串倒序输出

倒序拷贝到另一个字符数组#include <stdio.h>#include <string.h> int main(void){ char strinput[100]; scanf("%[^\n]", strinput); //除了换行符以外的字符全部接收 char stroutput[100];//用来存放倒序字符串 int i = 0; int j = 0; int len = strlen(strinput);

2022-01-05 21:24:43 442

原创 C语言实现的通讯录

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>//#define _CRT_SECURE_NO_WARNINGSstruct person{ char num[20]; //手机号 char name[20]; //姓名 char email[20]; //邮箱 char address[50]; //地址};int menu()/

2021-12-24 15:38:18 270

原创 堆排序(构建大根堆)

#include<stdio.h>//这个算法的思路是将一棵完全二叉树从根开始从1-n编号,其结点数据域对应着数组的1-n元素的值void sift(int a[], int k, int end)//调整函数,k为调整开始结点,end为结点总数{ int i = k;//若调整层数比较浅的结点则也需要调整与其父节点互换孩子为根节点的子树 int j = 2 * i;//指向左孩子 while (j <= end)//判断是否为叶子结点 { if (j < end&

2021-12-06 16:37:00 346

原创 选择排序,没什么好说的凑字数

#include<stdio.h>void selectsort(int a[], int n){for (int i = 0; i < n - 1; i ++){//int min = i;for (int j = i + 1; j < n; j++){ if (a[i] > a[j]) { int temp=a[i]; a[i] = a[j]; a[j] = temp; } }}}int main(){int

2021-12-05 22:10:36 176

原创 快速排序(含有递归)算法

#include <stdio.h>int partition(int a[], int first, int end)//划分函数,返回轴值{ int i = first; int j = end; while (i < j)// { while (i < j&&a[j] > a[i])//从轴值右边找到一个比轴值大的元素 j--; if (i < j)//这个值应该在轴值的右边 { int temp = a[i]

2021-12-05 21:57:25 208

原创 哈夫曼树的创建和哈夫曼编码

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<limits.h>#include<string.h>//int n1 = 0, n2 = 0;#pragma warning(disable:4996)struct Huffunode//定义哈夫曼树结点{ int weight; int parent; int lchild; int rchild;

2021-12-02 20:03:32 975

原创 01背包问题

#include<stdio.h>#include<stdlib.h>#include<string.h>struct Nature{ int v; int w; int s;};int max(int a, int b){ return a > b ? a : b;}int main(){ int N, V; scanf_s("%d %d", &N,&V); Nature a[1000]; for (int

2021-11-30 14:24:51 58

原创 01背包问题个人想法代码(部分数据结果不准确)

#include<stdio.h>struct Nature{ int v; int w; int s;};void bubblesort(Nature a[], int n){ Nature temp; for (int j = n - 1; j > 0; j--)//控制比较的最右端下标 for (int i = 0; i < j; i++)//执行冒泡比较 { if ((double)(a[i].w/a[i].v) <(double)(

2021-11-29 23:11:17 43

原创 冒泡排序算法实现

#include<stdio.h>void bubblesort(int a[], int n){ int temp; for(int j=n-1;j>0;j--)//控制比较的最右端下标 for (int i = 0; i < j; i++)//执行冒泡比较 { if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }

2021-11-25 17:11:46 125

原创 希尔排序算法实现

```c#include<stdio.h>#include<stdlib.h>void Shellsort(int r[], int n){ for (int d = n / 3; d >= 1; )//增量d一般取n/2,这个是作业要求取n/3 { for (int i = d + 1; i <= n; i++) { r[0] = r[i];//r[0]作为临时保存比较元素作用 int j = i - d;//j初始取指向比较元素的.

2021-11-24 12:13:55 342

原创 二分查找算法

#include<stdio.h>#include<stdlib.h>int main(){ int array[] = { 1,4,7,9,22,56,89,122,234,556,789 }; int length = sizeof(array) / sizeof(array[0]); int index = -1,mid; int low = 0, high = length - 1; int target = 122; while (low <= h

2021-11-23 20:55:32 836

原创 二叉树的结点删除算法实现

//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode

2021-11-21 15:15:02 320

原创 二叉排序树的查找递归算法实现

//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode

2021-11-19 20:42:53 4036

原创 递归、非递归的深度优先遍历算法实现

#include<stdio.h>#include<string.h>#include<stdlib.h>struct Arcnode { int adjvex; Arcnode* next;};struct Vertexnode { char vertex; Arcnode* first;};const int MAX_VERTEX = 10;Vertexnode adjlist[MAX_VERTEX];void Creategraph(

2021-11-19 19:21:18 829

原创 基于邻接矩阵的广度优先遍历算法实现

#include<stdio.h>#include<string.h>#include<stdlib.h>struct Mgraph { int visit[100]; int matrix[100][100]; char vertex[100]; int n, e;};void Create(Mgraph& g,char a[], int n,int e){ g.visit[100] = { 0 }; g.e = e; g.n =

2021-11-19 19:19:11 1165

原创 二叉树的前中后递归与非递归遍历算法实现

(1) 二叉树的前序遍历程序,包含递归、非递归。(2) 二叉树的中序遍历程序,包含递归、非递归。(3) 二叉树的后序遍历程序,包含递归、非递归。代码如下#include <stdio.h>#include <stdlib.h>// 定义节点typedef struct Node { char data; struct Node* lChild; struct Node* rChild;} BinTNode;// 根据广义表表示二叉树结构来创建二叉树链表

2021-11-19 19:16:20 115

原创 二叉排序树的算法实现

//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode

2021-11-19 19:12:35 200

原创 拓扑排序算法的实现

//拓扑排序算法#include<stdio.h>#include<string.h>#include<stdlib.h>//定义边表结构struct Arcnode { int adjvex; Arcnode* next;};//定义顶点表结构struct Vertexnode { int in; char vertex; Arcnode* first;};//定义图结构struct Graph{ Vertexnode adjlist

2021-11-19 12:33:44 376

原创 最短路径(Dijskra算法实现,迪杰斯特拉算法

```c#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3fconst int MAX_VERNUM=100;//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph { int matrix[100][100]; char vertex[100]; int vernum, edgenum;};//初始化图void Creategraph(Graph &g, cha.

2021-11-18 19:49:33 421

原创 网图的最小生成树prim(普利姆)算法

#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3f//定义辅助表类型struct Nodetype { int adjvex; int lowcost;};//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph { int matrix[100][100]; char vertex[100]; int vernum, edgenum;};//初始化图void Cre

2021-11-16 21:17:20 64

原创 网图的最小生成树prim(普利姆)算法

#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3f//定义辅助表类型struct Nodetype {int adjvex;int lowcost;};//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph {int matrix[100][100];char vertex[100];int vernum, edgenum;};//初始化图void Creategr

2021-11-16 21:02:57 486

原创 图的最小生成树克鲁斯卡尔(kruskal)算法

#include<stdio.h>//构造边的数据类型,包括起点终点权值struct Edgetype {int from;int to;int weight;};//少用宏定义const int MAXvertex = 10;const int MAXedge = 100;//构造图的结构体,包括用来储存顶点信息的数组ver和边信息的表数组edgetablestruct Graph {char ver[MAXvertex];Edgetype edgetable[MA

2021-11-15 21:55:53 401

原创 有向图邻接表的递归非递归深度优先遍历

#include<stdio.h>#include<string.h>#include<stdlib.h>struct Arcnode {int adjvex;Arcnode* next;};struct Vertexnode {char vertex;Arcnode* first;};const int MAX_VERTEX = 10;Vertexnode adjlist[MAX_VERTEX];void Creategraph(char a[

2021-11-10 20:28:19 1193

原创 以汉诺塔为例的递归心得

对于递归不要去具体想象它的运作过程,要不然会绕晕编写代码的步骤大概是先找出临界条件和临界操作然后找出循环的操作是什么,可以试着倒数第二(n-1)到最后一个(n)去探索。递归往往把前面的当作一个整体,然后对下一个个体进行操作,例如汉诺塔就是把1到n-1当做一个整体然后与第n个进行操作,这样可以起到简化的作用,对于前面的1到n-1的整体,又可以由1-n-2组成的整体和n-1进行操作,就这样一直传递到1,触发临界条件操作,然后进行归的操作(出栈)附上代码void hanoi(int n,char A,

2021-10-27 22:11:53 239

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除