先不急先没到这周的学习内容,先来上周的

有一个 n \times mn×m 的棋盘,在某个点 (x, y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。

输入格式

输入只有一行四个整数,分别为 n, m, x, yn,m,x,y。

输出格式

一个 n \times mn×m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 -1−1)。

输入输出样例

输入 #1复制

3 3 1 1

输出 #1复制

0    3    2
3    -1   1
2    1    4    

说明/提示

数据规模与约定

对于全部的测试点,保证 1 \leq x \leq n \leq 4001≤x≤n≤400,1 \leq y \leq m \leq 4001≤y≤m≤400。

思路首先你得知道象棋里面有多少种走法(日字的方式)所以放像有8种,其次就是dfs写不了要用bfs每走一步把步数加上且把落得格子都打上标记直接标记为步数就好了(但我不是这样写得我把标记和填步数得分开了小问题)。

上码

#include<stdio.h>
int n,m,x,y;
int ma[501][501];//记步数得数组
int km[501][501]={0};//打标记的数组
int tuo=0,mi=1;
int bx[8]={-1,-1,1,1,2,2,-2,-2};
int by[8]={-2,2,2,-2,-1,1,1,-1};//方向
struct dui{//写个结构体当队列
int a,b;
}duis[170000];int main(){
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int p=1;p<=n;p++){for(int y=1;y<=m;y++){ma[p][y]=-1;//到不了的地方为-1先初始化全部都是1.}
duis[mi].a=x;
duis[mi].b=y;
ma[x][y]=0;
km[x][y]=1;}
while(tuo<mi){
tuo++;
int s=ma[duis[tuo].a][duis[tuo].b]+1;//到新点的步数就是上一点加1;
for(int l=0;l<8;l++){int lx=duis[tuo].a+bx[l],ly=duis[tuo].b+by[l];//向外扩展if(lx>=1&&lx<=n&&ly>=1&&ly<=m&&km[lx][ly]==0){mi++;duis[mi].a=lx;//新的点入队duis[mi].b=ly;km[lx][ly]=1;//打标记啦ma[lx][ly]=s;}
}
}for(int z=1;z<=n;z++){for(int u=1;u<=m;u++){printf("%-5d",ma[z][u]);//打印得时候看看格式呀别错了}printf("\n");}return 0;
}

好了到了这周得学习了

先来学个二叉树看看我一点5小时 网课的功力

首先二叉树就是一堆结构体通过指针以一个连接两个的方式连接

每个圈圈就是一个结构体,我们称之为节点

而A就是根节点头头来的 ,通过指针连接B和C当然也不一定要有连的可以连接的为NULL空的

然后就是二叉树的几种遍历方式

1.先序遍历  方式为先根再左后右

2中序遍历  方式为先左再根后右

3.后序遍历 方式为先左后右再根

这3种都是用递归来实现的。

很多3言二语难以讲清来点代码更加易懂

#include<stdio.h>
#include<stdlib.h>
typedef struct node{//这就是一个节点int a;struct node* l;struct node* r;}Node;
typedef struct {//这个指向根节点代表一整颗树Node* root;
}Tree;
void qianxu(Node* node){//前序遍历
if(node!=NULL){printf("%d\n",node->a);qianxu(node->l);qianxu(node->r);
}
}
void zhongxu(Node* node){//中序遍历if(node!=NULL){zhongxu(node->l);printf("%d\n",node->a);zhongxu(node->r);}
}
void houxu(Node* node){//后序遍历if(node!=NULL){houxu(node->l);houxu(node->r);printf("%d\n",node->a);}
}
void insert(Tree* tree,int va){//把va加入到树里面去
Node* node=malloc(sizeof(Node));//函数退出时候不会被内存销毁掉node->a=va;node->l=NULL;node->r=NULL;//把va变成一个节点if(tree->root==NULL){//树还没有一个节点的时候tree->root=node;//把这个新建立的节点当树的开端}else{Node* teamp=tree->root;//做比较,先定义一个临时的节点让它等于根while(teamp!=NULL){//只要没空就不断的做比较if(va<teamp->a){//比比较的节点小if(teamp->l==NULL){//如果是空的就把va方在他的左边teamp->l=node;return ;}else{//如果不是空的teamp=teamp->l;}}else{//比它大放在左边if(teamp->r==NULL){teamp->r=node;return ;}else{teamp=teamp->r;}}}}
}
int main(){//测试一下写对了没
int arr[7]={6,3,8,2,5,1,7};
Tree tree;
tree.root=NULL;
for(int h=0;h<7;h++){insert(&tree,arr[h]);
}
qianxu(tree.root);
zhongxu(tree.root);
return 0;
}

这是一个查找二叉树数据满足左边比根小右边比根大不要被误导了啊(而且我写的没有写数据有相同的情况你可以自己加上去),

有个知识点,查找二叉树的中序一定是排好序的序列,如果用这个进行查找会更快的。

还有链表的二叉树今天没有学明天我看看。

写个题目吧!

农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。

你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。 这是在样例输入和 样例输出中的树的图形表达方式:

         C/  \/  \B    G/ \  /A   D  H/ \E   F

树的中序遍历是按照左子树,根,右子树的顺序访问节点。

树的前序遍历是按照根,左子树,右子树的顺序访问节点。

树的后序遍历是按照左子树,右子树,根的顺序访问节点。

输入格式

第一行: 树的中序遍历

第二行: 同样的树的前序遍历

输出格式

单独的一行表示该树的后序遍历。

输入输出样例

输入 #1复制

ABEDFCHG
CBADEFGH

输出 #1复制

AEFDBHGC

说明/提示

题目翻译来自NOCOW。

USACO Training Section 3.4

思路就是用中序和先序把二叉树给模拟出来,后序一下就有

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char c[24],b[24];
void dfs(int a1,int a2,int a3,int a4){//如此的搜索也把完整的树给弄出来了
if(a1>a2||a3>a4)//等于就是最后的了大于就越界了return ;for(int u=a1;u<=a2;u++)if(c[u]==b[a3]){//找节点把树分为左边和右边通过递归大树变小树小树再变小最后没了dfs(a1,u-1,a3+1,a3+u-a1);//左边b[a3+1]是左边的这树的根根节点dfs(u+1,a2,a3+u-a1+1,a4);//右边同理printf("%c",c[u]);//输出//边还原且输出,可恶好强}
}
int main(){
scanf("%s",c);
scanf("%s",b);
int j=strlen(b);
dfs(0,j-1,0,j-1);//j-1是长度的因为数组的小标就是0到n-1
return 0;
}

看了dalao的解答写的我也是理解了好久呀,每一条的注释都是我智慧的闪光啊哈哈哈,看不懂就多看其实这题目就是要你了解啥是二叉树的先序和中序以及后序每别的意思,然后要你用先序和中序来推出整颗树,就是这样的啦。

今日无事,退朝!

2023快乐学习日记(好日子今天是个好日子)1/2相关推荐

  1. (学习日记)2023.06.07

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  2. (学习日记)2023.04.28

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  3. (学习日记)2023.04.25

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  4. (学习日记)2023.04.26

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  5. (学习日记)2023.4.22

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  6. (学习日记)2023.04.24

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  7. (学习日记)2023.06.06

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  8. (学习日记)2023.4.12

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  9. (学习日记)2023.4.11

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

最新文章

  1. DuerOS Java开发技能(二)第三方授权(OAUTH2.0)
  2. CFG_GCR全局配置寄存器设置
  3. 包头昆区多大面积_包头地铁“胎死腹中”,何时“卷土重来”?
  4. Page_Load基类,重写OnLoad
  5. 计算器如何输出log以2为底的对数(利用对数log换底公式)
  6. windows10 右键 manage 没反应
  7. 代码随想录程序员求职攻略完整pdf开放下载
  8. sqlyog证书秘钥(注册码)
  9. 分屏 投影显示 PPT
  10. ICE C++ Hello World
  11. oracle外表层,三步教会你掌握Oracle外表(externaltable)
  12. Kryo 高性能序列化和反序列化
  13. 【​观察】POWER9,一个全面开创AI时代的芯片来了!
  14. 虎书学习笔记2:图形学基础数学(向量、点积、叉积、)
  15. Shopee使用虚拟信用卡绑卡测试购物教程
  16. matlab对非平稳一维信号的小波变换
  17. C#解析.msg文件(outlook文件)
  18. 王道书P41 T21(单链表实现)
  19. 朝花夕拾《精通CSS》一、HTML CSS 的基础
  20. 计算机视觉——DoG和LoG算子

热门文章

  1. 怎么减肥? 卡路里数据,升糖指数,饱腹指数,
  2. H5学习之11(html中的浮动布局)
  3. OA公文使用NTKO控件查看报错解决办法
  4. 《学做智能车——卓晴》学习笔记(1)——智能汽车智能控制器方案设计
  5. 仿个人税务 app html5_你下载的个税APP可能是假的!当心抢你的钱!
  6. html基础、css基础(前端基础知识入门)
  7. SD NAND 为什么可以完胜T卡(tf卡/sd卡)?
  8. matplotlib绘图输出中文字体【可以使用自己下载的字体】
  9. Visio 公式编辑技巧
  10. GANSYNTH(基于对抗性神经网络的音频合成)