2022/1/13学习总结

刷题(8.5h)

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct node
{
    int x,y,step;
}node;

int s[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int map[50][50];
int ma[50][50];
int vis[50][50];
void bfs(int sx,int sy);
node dui[1600];
int n,k=0;
int rear=0,head=0;
int main()
{
    scanf("%d",&n);
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&map[i][j]);
            ma[i][j]=map[i][j];
        }
    }
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
    {
        if(map[i][j]==0)
            bfs(i,j);
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
    {
        if(map[i][j]==2)
            ma[i][j]=2;
        printf("%d ",ma[i][j]);
    }
    printf("\n");
    }

    return 0;
}

void bfs(int sx,int sy)
{

    int i,j;
    k=0;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        vis[i][j]=0;
    node st;
    st.x=sx;
    st.y=sy;
    st.step=0;
    dui[rear].x=st.x;
    dui[rear].y=st.y;
    dui[rear].step=st.step;
    rear++;vis[sx][sy]=1;
    while(head<rear)
    {
        node p;
        p.x=dui[head].x;
        p.y=dui[head].y;
        p.step=dui[head].step;
        head++;

        for(int i=0;i<4;i++)
        {
            int nx=p.x+s[i][0],ny=p.y+s[i][1];
            if(nx<0||ny<0||nx>=n||ny>=n)
            {
                k++;continue;

            }
            if(vis[nx][ny]==1||map[nx][ny]!=0)
                continue;
            node yy;
            yy.x=nx;
            yy.y=ny;
            yy.step=p.step+1;
            vis[nx][ny]=1;

            dui[rear].x=yy.x;
            dui[rear].y=yy.y;
            dui[rear].step=yy.step;
            rear++;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(vis[i][j]==1&&k!=0)
            {
                map[i][j]=3;
            }
            if(vis[i][j]==1&&k==0)
            {
                map[i][j]=2;
            }
        }
    }

}

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int eat[10][2];
int n;
int sb=99999999;
void dfs(int s,int b,int x);
int vis[10]={0,0,0,0,0,0,0,0,0,0};


int main()
{
    scanf("%d",&n);
    int i;

    for(i=0;i<n;i++)
        scanf("%d %d",&eat[i][0],&eat[i][1]);
    dfs(1,0,0);
    printf("%d",sb);
    return 0;
}

void dfs(int s,int b,int x)
{
    if(x==n)
    {
        if(abs(s-b)<sb)
            sb=abs(s-b);
        return ;
    }

    int i;
    int ss=1,bb=0;
    for(i=0;i<n;i++)
    {
        if(vis[i]==1)
            continue;
         ss=s*eat[i][0];
         bb=b+eat[i][1];
        vis[i]=1;
        if(abs(ss-bb)<sb)
            sb=abs(ss-bb);
        dfs(ss,bb,x+1);
        vis[i]=0;
        ss=1;
        bb=0;
    }
}

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int map[255];
int vis[255];
int n,a,b,sum=7999999;
void dfs(int L,int step);

int main()
{
    scanf("%d %d %d",&n,&a,&b);
    int i;
    for(i=1;i<=n;i++)
    {scanf("%d",&map[i]);vis[i]=0; }
    vis[a]=1;
    dfs(a,0);
    if(sum!=7999999)printf("%d",sum);
    else printf("-1");
    return 0;
}

void dfs(int L,int step)
{
    if(L==b)
    {
        if(step<sum)
            sum=step;
    }
    if(step>sum)return ;
    vis[L]=1;
    if(L+map[L]<=n&&vis[L+map[L]]==0)
        dfs(L+map[L],step+1);
    if(L-map[L]>=1&&vis[L-map[L]]==0)
        dfs(L-map[L],step+1);
    vis[L]=0;
}

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct node
{
    int x,y,step;
}node;
int sx,sy;
int s[8][2]={{1,-2},{-1,-2},{2,-1},{-2,-1},{1,2},{-1,2},{2,1},{-2,1}};
int map[500][500];

int vis[500][500];
void bfs();
node dui[160010];
int n,m;
int rear=0,head=0;
int main()
{
    scanf("%d %d %d %d",&n,&m,&sx,&sy);

    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            vis[i][j]=0;
            map[i][j]=-1;

        }
    }
    bfs();
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {

            printf("%-5d",map[i][j]);
        }
        printf("\n");
    }

    return 0;
}

void bfs()
{

    node st;
    st.x=sx;
    st.y=sy;
    st.step=0;
    dui[rear].x=st.x;
    dui[rear].y=st.y;
    dui[rear].step=st.step;
    rear++;vis[sx][sy]=1;map[sx][sy]=0;
    while(head<rear)
    {
        node p;
        p.x=dui[head].x;
        p.y=dui[head].y;
        p.step=dui[head].step;
        head++;

        for(int i=0;i<8;i++)
        {
            int nx=p.x+s[i][0],ny=p.y+s[i][1];
            if(nx<1||ny<1||nx>n||ny>m||vis[nx][ny]==1)
            {
                continue;
            }
            node yy;
            yy.x=nx;
            yy.y=ny;
            yy.step=p.step+1;
            vis[nx][ny]=1;
            map[nx][ny]=yy.step;
            dui[rear].x=yy.x;
            dui[rear].y=yy.y;
            dui[rear].step=yy.step;
            rear++;
        }
    }

}

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int s[4];
int a[4][20];
void dfs(int x,int k);
int L=0,R=0;
int sum=10086,sr=0;
int main()
{
    int i,j;
    for(i=0;i<4;i++)
        scanf("%d",&s[i]);
    for(i=0;i<s[0];i++)
        scanf("%d",&a[0][i]);
    for(i=0;i<s[1];i++)
        scanf("%d",&a[1][i]);
    for(i=0;i<s[2];i++)
        scanf("%d",&a[2][i]);
    for(i=0;i<s[3];i++)
        scanf("%d",&a[3][i]);
    for(i=0;i<4;i++)
    {
        L=0;
        R=0;
        sum=10086666;
        dfs(i,0);
        sr=sr+sum;
    }
    printf("%d",sr);
    return 0;
}

void dfs(int x,int k)
{
    if(k>=s[x])
    {
        if(L>R&&sum>L)sum=L;
        if(R>L&&sum>R)sum=R;
        if(L==R&&sum>R)sum=R;
        return ;
    }
    L=L+a[x][k];
    dfs(x,k+1);
    L=L-a[x][k];
    R=R+a[x][k];
    dfs(x,k+1);
    R=R-a[x][k];

}

总计8.5h

明日计划

1.看大话数据结构

2.巩固本周知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值