当前位置: 首页 > news >正文

学习总结2.18

在原本基本的数船的基础上,增加了船不能畸形的要求,船只能是矩形,由此需要在dfs找船前确定是否有畸形船

.*   **   *.   **
**   .*   **   *.

出现畸形船的情况如上图,即两艘船有一个交集时,此时就可以判断出bad placement

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 1005
int r,c;
char ship[max][max];
int count=0;
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
int row,line;
void dfs(int x,int y){
    ship[x][y]='.';
    for(int i=0;i<4;i++){
        row=x+dx[i];
        line=y+dy[i];
        if(row>=1&&row<=r&&line>=1&&line<=c&&ship[row][line]=='#'){
            dfs(row,line);
        }
    }
}
int main() {
    scanf("%d %d",&r,&c);
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            scanf(" %c",&ship[i][j]);
        }
    }
    for(int i=1;i<r;i++){
        for(int j=1;j<c;j++){
            int cnt=0;
            if(ship[i][j]=='#') cnt++;
            if(ship[i+1][j]=='#') cnt++;
            if(ship[i][j+1]=='#') cnt++;
            if(ship[i+1][j+1]=='#') cnt++;
            if(cnt==3){//此时为相撞的情况
                printf("Bad placement.");
                return 0;
            }
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            if(ship[i][j]=='#'){
                dfs(i,j);
                count++;
            }
        }
    }
    printf("There are %d ships.",count);
    return 0;
}

就当熟悉了bfs的函数

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 1005
typedef struct{
    int x,y,step;
}Node;
Node queue[max*max];//数组模拟队列
int n;
int fx,fy,ex,ey;
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
char g[max][max];
int head=0,tail=0;
void bfs(){
    queue[tail++]=(Node){fx,fy,0};
    g[fx][fy]='1';
    while(head<tail){//队列不为空
        Node cur=queue[head++];
        if(cur.x==ex&&cur.y==ey){
            printf("%d\n",cur.step);
            return;
        }
        for(int i=0;i<4;i++){
            int row=cur.x+dx[i];
            int line=cur.y+dy[i];
            if(row>=1&&row<=n&&line>=1&&line<=n&&g[row][line]=='0'){
                queue[tail++]=(Node){row,line,cur.step+1};
                g[row][line]='1';
            }
        }
    }
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf(" %c",&g[i][j]);
        }
    }
    scanf("%d %d %d %d",&fx,&fy,&ex,&ey);
    bfs();
    return 0;
}

相关文章:

  • ppt中如何快速自动地将整页标题和大段文字自动设计形状和颜色
  • kafka消费能力压测:使用官方工具
  • 大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?
  • 刚性平衡机建模
  • [Android] Battery Guru - 手机电量管理优化
  • stm32rtc实时时钟详解文章
  • 学习查看 linux 关于进程的文件信息 cat /proc/968/status
  • LNMP+Zabbix安装部署(Zabbix6.0 Lnmp+Zabbix Installation and Deployment)
  • 02.05、链表求和
  • 【算法】回溯算法
  • spring boot知识点3
  • Dart 3.5 学习汇总(更新中)
  • 【Pandas】pandas Series last
  • Docker镜像拉取失败解决方案
  • centos7配置rsyslog日志服务器
  • 【阮一峰】5.函数
  • C++:并发编程基础
  • 【前端ES】ECMAScript 2023 (ES14) 引入了多个新特性,简单介绍几个不为人知但却好用的方法
  • 华为交换机堆叠技术简介配置
  • .NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例
  • 印巴战火LIVE丨“快速接近战争状态”?印度袭击巴军事基地,巴启动反制军事行动
  • 5天完成1000多万元交易额,“一张手机膜”畅销海内外的启示
  • 山寨“小米”智能马桶、花洒销售额过亿,被判赔3500万元
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 少年中国之少年的形塑
  • 进化版大巴黎通杀英超,那个男人后悔了吗