总结第九周(代码片段)

钟钟终 钟钟终     2023-01-29     449

关键词:

本周结束了搜索题单,开始刷数学的三个题单和二分题单,预计14周前结束。


深搜关于地图问题:
1.注意边界。(注意使用memset的时候要考虑清楚,可能把不需要的部分也进行初始化,影响搜索)。2.不同题目的区别点在于搜索中if语句的不同,根据题意进行编写,也不是很复杂。
3.终止条件:满足便进行return返回,可能是求方案数,也可能是到达最少需要步数一类问题。
(进行回溯,将走过的点在标记为初始化状态,方便下一层循环)

模板题:P1605 迷宫

#include <bits/stdc++.h>
using namespace std;
int n,m,t,sx,sy,fx,fy,ans;
int mp[10][10],vis[10][10];
int dx[5]=0,0,1,-1;
int dy[5]=1,-1,0,0;
void dfs(int x,int y)

    if(x==fx&&y==fy)
    
        ans++;
        return;
    
    for(int i=0;i<4;i++)
    
        if(vis[x+dx[i]][y+dy[i]]==0&&mp[x+dx[i]][y+dy[i]]==1)
        
            vis[x][y]=1;
            dfs(x+dx[i],y+dy[i]);
            vis[x][y]=0;
        
    

int main()

    cin>>n>>m>>t;
    cin>>sx>>sy>>fx>>fy;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        mp[i][j]=1;
    for(int i=1;i<=t;i++)
    
        int l,r;
        cin>>l>>r;
        mp[l][r]=0;
    
    dfs(sx,sy);
    cout<<ans<<endl;
    return 0;


P1019 [NOIP2000 提高组] 单词接龙
题目要求:
1.求出可拼接长度最大的字符串。
2.一个单词最多可使用2次。
3.存在包含关系的字符串无法拼接。
思路整理:
1.因为规定了“龙”的开头,因此长度从1开始累积。
2.写一个函数返回两个字符串重叠部分的数目。
3.dfs进行遍历,对每个字符串都要考虑两次的情况。

获得重复两个字符串收尾重复元素的方法:

int rp(string s1,string s2)

    for(int i=1;i<min(s1.length(),s2.length());i++)
    
        bool f=1;
        for(int j=0;j<i;j++)
        
            if(s1[s1.length()-i+j]!=s2[j]) f=0;
        
        if(f) return i;
    
    return 0;

#include <bits/stdc++.h>
using namespace std;
int n,lg,num[30];
string st[30];
int rp(string s1,string s2)

    for(int i=1;i<min(s1.length(),s2.length());i++)
    
        bool f=1;
        for(int j=0;j<i;j++)
        
            if(s1[s1.length()-i+j]!=s2[j]) f=0;
        
        if(f) return i;
    
    return 0;

void dfs(string s,int lg1)

    lg=max(lg,lg1);
    for(int i=0;i<n;i++)
    
        if(num[i]>=2) continue;
        int tmp=rp(s,st[i]);
        if(tmp>0)
        
            num[i]++;
            dfs(st[i],lg1+st[i].length()-tmp);
            num[i]--;
        
    

int main()

    cin>>n;
    for(int i=0;i<=n;i++)
        cin>>st[i];
    dfs(' '+st[n],1);
    cout<<lg<<endl;
    return 0;


P1101 单词方阵

可能是边界问题,最后一组数据总回报re。但加上边界,其他都能过,最后一组数据就wr了,应该是代码的一些细节问题,但就是找不出来。。。。。

#include <bits/stdc++.h>

using namespace std;
int n,d,s[105][105],c[105][2];
bool vis[105][105];
char ch[105][105];
string s1=" yizhong";
int dx[9]=0,0,0,-1,-1,-1,1,1,1;
int dy[9]=0,1,-1,0,-1,1,0,-1,1;
int dfs(int i,int j,int x,int y,int m)

    if(m>7)
    
        vis[i][j]=1;
        return 1;
    
    if(ch[i+x][j+y]==s1[m])
    
        if(dfs(i+x,j+y,x,y,m+1))
        
            vis[i][j]=1;
            return 1;
        
    

int main()

    freopen("in.txt","r",stdin);
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        
            cin>>ch[i][j];
            if(ch[i][j]=='y')
            
                c[++d][0]=i;c[d][1]=j;
            
        
    while(d)
    
        int i=c[d][0];
        int j=c[d][1];
        for(int k=1;k<=8;k++)
        
            if(ch[i+dx[k]][j+dy[k]]=='i')
                if(dfs(i+dx[k],j+dy[k],dx[k],dy[k],3))
                vis[i][j]=1;
        
        d--;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(vis[i][j])
            cout<<ch[i][j];
        else
            cout<<"*";
        
        cout<<endl;
    
    return 0;

P2404 自然数的拆分问题
将数字n一层层拆分,利用回溯遍历出多种可能。(最好去模拟一下过程 ,便于理解递归的过程)

#include <iostream>

using namespace std;
int n,a[3005]=1;
void dfs(int s,int g)

    int i;
    for(i=a[g-1];i<=s;i++)
    
        if(i<n)
        
            a[g]=i;
            s-=i;
            if(s==0)
            
                for(int j=1;j<=g-1;j++)
                    cout<<a[j]<<"+";
                cout<<a[g]<<endl;
            
            else
            
                dfs(s,g+1);
            
            s+=i;
        
    

int main()

    cin>>n;
    dfs(n,1);
    return 0;


P1596 [USACO10OCT]Lake Counting S
一道DFS判断连通块的题目。本题的技巧点在于,一般我们将遍历过为“W”的点开个数组进行标记,本题则直接将“W”变为“.”,非常巧妙。

#include <bits/stdc++.h>

using namespace std;
int n,m,ans;
char ch[105][105];
int dx[9]=0,0,0,1,1,1,-1,-1,-1;
int dy[9]=0,1,-1,0,1,-1,0,-1,1;
void dfs(int x,int y)

    ch[x][y]='.';
    for(int i=1;i<=8;i++)
    
        if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m&&ch[x+dx[i]][y+dy[i]]=='W')
            dfs(x+dx[i],y+dy[i]);
    

int main()

    //freopen("in.txt","r",stdin);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    
        for(int j=1;j<=m;j++)
            cin>>ch[i][j];
    
    for(int i=1;i<=n;i++)
    
        for(int j=1;j<=m;j++)
        
            if(ch[i][j]=='W')
                dfs(i,j);
                ans++;
            
        
    
    cout<<ans<<endl;
    return 0;

P1162 填涂颜色

涂色问题:注意边界,应该先搜索外面一圈,则的话就会出现错误(边缘处被涂色),这种情况由于边界被范围限制,会被误认为被1包裹。

void dfs(int x,int y)   //两种书写递归的方式,考虑到外围的一圈,这种递归方式要从自己本身搜索

    for(int i=0;i<=4;i++)
    
        if(x+dx[i]>=0&&x+dx[i]<=n+1&&y+dy[i]>=0&&y+dy[i]<=n+1&&vis[x+dx[i]][y+dy[i]]==0)
        
            vis[x][y]=1; 
            dfs(x+dx[i],y+dy[i]);
        
    

#include <bits/stdc++.h>
using namespace std;
int dx[5]=0,0,0,1,-1;
int dy[5]=0,1,-1,0,0;
int a[50][50];
int n;
void dfs(int x,int y)

    if(x>=0 && x<=n+1 && y>=0&& y<=n+1)
    
        if(a[x][y]==1||a[x][y]==3)
            return ;
        else
        
            a[x][y]=3;
            for(int i=1;i<=4;i++)
            dfs(x+dx[i],y+dy[i]);
        
    

int main()

    freopen("in.txt","r",stdin);
    cin>>n;
    for(int i=1;i<=n;i++)
    
        for(int j=1;j<=n;j++)
        
            cin>>a[i][j];
        第九周学习总结-20175218(代码片段)

201752182018-2019-2《Java程序设计》第九周学习总结教材学习内容总结第十一章主要讲的就是JDBC与MySQL数据库,内容包括MySQL数据库管理系统,连接MySQL数据库,查询操作,更新、添加与删除操作,使用预处理语句,通用查询以及事务... 查看详情

第九周java学习总结(代码片段)

学号20175206《Java程序设计》第九周学习总结教材学习内容总结第十一章:JDBC数据库操作主要内容MySQL数据库管理系统连接MySQL数据库JDBC连接数据库查询操作更新、添加与删除操作使用预处理语句事务批处理重点和难点重点:创建... 查看详情

第九周编程总结(代码片段)

6-1按等级统计学生成绩(20分)本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。函数接口定义:intset_grade(structstudent*p,intn);其中p是指向学生信息的结构体数组的指针,该结构体的定义为:structstudentintnu... 查看详情

第九周编程总结(代码片段)

7-1查询水果价格(15分)给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。首先在屏幕上显示以下菜单:[1]apple[2]pear[3]orange[4]grape... 查看详情

201771010137赵栋《第九周学习总结》(代码片段)

1、实验目的与要求(1)掌握java异常处理技术;(2)了解断言的用法;(3)了解日志的用途;(4)掌握程序基础调试技巧;1.Throwable类中的常用方法注意:catch关键字后面括号中的Exception类型的参数e。Exception就是try代码块传递给catch代码块... 查看详情

第九周编程总结(代码片段)

 表头:这个作业属于的课程c语言程序设计Ⅱ这个作业的要求在哪里用结构解决问题我在这个课程的目标是简单的编程解决问题这个作业在哪个具体方面帮助我实现目标学习和利用结构参考文献c语言程序设计II实验题目:6-1&n... 查看详情

总结第九周(代码片段)

本周结束了搜索题单,开始刷数学的三个题单和二分题单,预计14周前结束。深搜关于地图问题:1.注意边界。(注意使用memset的时候要考虑清楚,可能把不需要的部分也进行初始化,影响搜索)。2.不... 查看详情

201723282018-2019《java软件结构与数据结构》第九周学习总结(代码片段)

201723282018-2019《Java软件结构与数据结构》第九周学习总结概述Generalization本周学习了无向图、有向图、带权图、常用的图算法、图的实现策略。教材学习内容总结Asummaryoftextbook图(graph)与树类似,图由结点和这些结点之间的连... 查看详情

李瑞红201771010111《第九周学习总结》(代码片段)

实验九异常、断言与日志实验时间2018-10-25第一部分:理论部分 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行。Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置。&nbs... 查看详情

《程序设计与数据结构》第九周学习总结(代码片段)

学号20172326《程序设计与数据结构》第九周学习总结教材学习内容总结图:图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的... 查看详情

2018-2019-120165209《信息安全系统设计基础》第九周学习总结(代码片段)

2018-2019-120165209《信息安全系统设计基础》第九周学习总结教材学习内容总结目录内容:ls1.理解虚拟存储器的概念和作用2.理解地址翻译的概念3.理解存储器映射4.掌握动态存储器分配的方法5.理解垃圾收集的概念6.了解C语言中与... 查看详情

2018-2019-120165225《信息安全系统设计基础》第九周学习总结(代码片段)

2018-2019-120165225《信息安全系统设计基础》第九周学习总结教材学习内容总结1.理解虚拟存储器的概念和作用;2.理解地址翻译的概念;3.理解存储器映射;4.掌握动态存储器分配的方法;5.理解垃圾收集的概念;6.了解C语言中与存储器有... 查看详情

#2019-2020-4《java程序设计》第九周总结(代码片段)

2019-2020-4《Java程序设计》第九周知识总结第十一章:JDBC与MySQL数据库11.1MySQL数据库管理系统下载安装:11.2启动MySQL数据库服务器具体启动过程请看书。命令:mysqld--initialize-insecure其作用是初始化data目录;命令:mysqladmin-uroot-ppassw... 查看详情

201723332018-2019-1《程序设计与数据结构》第九周学习总结(代码片段)

201723332018-2019-1《程序设计与数据结构》第九周学习总结教材学习内容总结《Java软件结构与数据结构》第十五章-图一、无向图①无向图的定义图是由结点与结点相连接构成的,与树类似。这些结点被常常称作顶点(vertice),这些顶... 查看详情

杨玲201771010133《面向对象程序设计(java)》第九周学习总结(代码片段)

《面向对象程序设计(java)》第九周学习总结第一部分:理论知识异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行。Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置。程序... 查看详情

第九周课程总结&实验报告(代码片段)

第九周课程总结&实验报告(七)实验任务详情:要求:(1)总票数1000张;(2)10个窗口同时开始卖票;(3)卖票过程延时1秒钟;(4)不能出现一票多卖或卖出负数号票的情况。实验代码:packageproject7;classMyThreadimplementsRunna... 查看详情

201723162018-2019-1《程序设计与数据结构》第九周学习总结(代码片段)

201723162018-2019-1《程序设计与数据结构》第九周学习总结教材学习内容总结第十五章图图:堆是具有两个附加属性得的一棵二叉树:它是一棵完全树;对每一节点,它小(大)于或等于其左孩子和右孩子。堆的分类:按照堆中元... 查看详情

第九周总结

学习时长6h代码量300行博客三篇学习内容Android开发layout页面布局 查看详情