2016-5-26:实验室第一天

来源:互联网 发布:mac百度云下载没反应 编辑:程序博客网 时间:2024/06/13 23:53

今天是进入实验室的第一天,太久没敲代码,以前掌握的知识现在都是一团糟。高精度快速幂什么的基本都忘了,就记得数塔,贪心之类的入门算法,尴尬。

重新学习准备从搜索开始学起,今天就学下搜索,dfs深搜。同时记录一下新学到的杂乱无章的各种知识点,反正是复制粘贴的,也不费事,哈哈哈。


A.构造函数

构造函数是你在创造了类的一个对象的时候首先运行的函数 可以有参数 可以无参数 也可以重载 你可以发现你在定义类的成员的时候无法赋初始值 构造函数的很重要的一个用处就是初始化里面的成员变量。


B.在C语言中,&有三种作用,分别如下:

1. 取地址。单目运算符。用来取一个变量的地址。

比如

int i, *p;
p = &i;//这里的&作用是取变量i的地址。

2. 位操作中的与操作运算符。

也就是常说的and操作,双目运算符。 

计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0

比如

0x12&0x23 转为二进制为:

B00010010&B00100011,

按位计算结果为B00000010,

即结果为0x02。

3. 当两个&&一起用的时候,表示为逻辑运算中的与运算。

逻辑运算结果只有0和1两种结果。 

一般在&&两边是两个逻辑表达式。

当两个表达式值均为1时,&&运算结果为1,否则为0。

比如

2>1 && 0<1 这个的值为1&&1 = 1。

1>2 && 2>0 这个值为0&&1 = 0。

1>2 && 2>3 这个值为0&&0=0。


C.百练(openjudge)-2815城堡问题:

题目链接:http://bailian.openjudge.cn/practice/2815/

//2016-5-26:城堡问题

//递归代码;
#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
using namespace std;
int color[55][55];
int room[55][55];
int x,y;
int maxroomarea,roomarea,roomnum;

void dfs(int i,int j)
{
    if(color[i][j]!=0)
        return ;

    color[i][j]=++roomarea;
    if((room[i][j]&1)==0) dfs(i,j-1);
    if((room[i][j]&2)==0) dfs(i-1,j);
    if((room[i][j]&4)==0) dfs(i,j+1);
    if((room[i][j]&8)==0) dfs(i+1,j);
}

int main()
{
    while(cin>>x>>y)
    {
        //inp;
        for(int i=1; i<=x; i++)
        {
            for(int j=1; j<=y; j++)
            {
                cin>>room[i][j];
            }
        }
        //run;
        maxroomarea=0;
        roomnum=0;
        memset(color,0,sizeof color);
        for(int i=1; i<=x; i++)
        {
            for(int j=1; j<=y; j++)
            {
                if(color[i][j]==0)
                {
                    roomnum++;
                    roomarea=0;
                    dfs(i,j);
                    maxroomarea=max(roomarea,maxroomarea);
                }
            }
        }
        cout<<roomnum<<endl<<maxroomarea<<endl;
    }
    return 0;
}

涂色记录已走过的路径点,大概就是这道题的重点了吧。


D.nefuoj-970:蛇形填数

题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=970

代码:

#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

int main()
{
    int x,y,a[21][21],n,num;
    while(cin>>n)
    {
        x=1;y=n;
        memset(a,0,sizeof(a));
        num=1;
        a[x][y]=num;
        while(num<n*n)
        {
            while(!a[x+1][y]&&x+1<=n) a[++x][y]=++num;//向下
            while(!a[x][y-1]&&y-1>=1) a[x][--y]=++num;
            while(!a[x-1][y]&&x-1>=1) a[--x][y]=++num;
            while(!a[x][y+1]&&y+1<=n) a[x][++y]=++num;
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            if(j!=n) cout<<a[i][j]<<' ';
            else cout<<a[i][j]<<endl;
        }
    }
}

因为好长一段时间都没想出来所以把代码贴在这里,来纪念我智障的那一段时间。



poj-1190:生日蛋糕

这道题应该是讲深搜里面的剪枝问题吧,三个小时最后没搞懂,gg;







0 0
原创粉丝点击