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

学习总结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;
}


http://www.kler.cn/a/552071.html

相关文章:

  • SpringAI系列 - RAG篇(三) - ETL
  • Qt的QPushButton样式设置
  • 简单认识一下-Redis
  • 计算机网络协议(二)
  • 【和春笋一起学C++】if else语句
  • 未来游戏:当人工智能重构虚拟世界的底层逻辑
  • 新数据结构(10)——Java抽象类和接口
  • EasyPoi系列之框架集成及基础使用
  • PHP语法完全入门指南:从零开始掌握动态网页
  • AWS Lambda自动化部署流程指南
  • C++:构造函数和析构函数
  • 软件评测师复习之计算机网络(4)
  • 数据结构----哈希表的插入与输出
  • 实用且美观,一款简单且模块化的UI组件库!
  • 机器学习_16 朴素贝叶斯知识点总结
  • CUDA 安装 一直卡在Installing Nsight Visual Studio Edition
  • 图数据库Neo4j面试内容整理-图(Graph)
  • vmware部署ubantu24x64
  • FastAdmin后端列表导入表格数据
  • 川翔云电脑使用教程(2025最新版)