45.图论3

news/2025/3/27 16:07:12/

孤岛面积

#include<iostream>
using namespace std;
int N,M;
int quex[100000];
int quey[100000];
int hh=-1,tt=-1;
int gra[60][60];
int visited[60][60];
int res=0;
int dir[4][2]={0,1,0,-1,-1,0,1,0};
void bfs(int x,int y){hh=tt;tt++;quex[tt]=x;quey[tt]=y;while(hh<tt){int cur_x=quex[hh+1];int cur_y=quey[hh+1];for(int i=0;i<4;i++){int next_x=cur_x+dir[i][0];int next_y=cur_y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited[next_x][next_y]&&gra[next_x][next_y]){tt++;quex[tt]=next_x;quey[tt]=next_y;}}hh++;visited[cur_x][cur_y]=1;}
}int main(){scanf("%d%d",&N,&M);for(int i=0;i<N;i++){for(int j=0;j<M;j++){scanf("%d",&gra[i][j]);}}for(int i=0;i<N;i++){if(gra[i][0]&&!visited[i][0]){bfs(i,0);}if(gra[i][M-1]&&!visited[i][M-1]){bfs(i,M-1);}}for(int j=0;j<M;j++){if(gra[0][j]&&!visited[0][j]){bfs(0,j);}if(gra[N-1][j]&&!visited[N-1][j]){bfs(N-1,j);}}for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!visited[i][j]&&gra[i][j]){res++;}}}cout<<res;
}

沉没孤岛

#include<iostream>
using namespace std;
int N,M;
int quex[100000];
int quey[100000];
int hh=-1,tt=-1;
int gra[60][60];
int visited[60][60];
int res=0;
int dir[4][2]={0,1,0,-1,-1,0,1,0};
void bfs(int x,int y){hh=tt;tt++;quex[tt]=x;quey[tt]=y;while(hh<tt){int cur_x=quex[hh+1];int cur_y=quey[hh+1];for(int i=0;i<4;i++){int next_x=cur_x+dir[i][0];int next_y=cur_y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited[next_x][next_y]&&gra[next_x][next_y]){tt++;quex[tt]=next_x;quey[tt]=next_y;}}hh++;visited[cur_x][cur_y]=1;}
}int main(){scanf("%d%d",&N,&M);for(int i=0;i<N;i++){for(int j=0;j<M;j++){scanf("%d",&gra[i][j]);}}for(int i=0;i<N;i++){if(gra[i][0]&&!visited[i][0]){bfs(i,0);}if(gra[i][M-1]&&!visited[i][M-1]){bfs(i,M-1);}}for(int j=0;j<M;j++){if(gra[0][j]&&!visited[0][j]){bfs(0,j);}if(gra[N-1][j]&&!visited[N-1][j]){bfs(N-1,j);}}for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!visited[i][j]&&gra[i][j]){gra[i][j]=0;}}}for(int i=0;i<N;i++){for(int j=0;j<M;j++){printf("%d ",gra[i][j]);}printf("\n");}}

水流问题

#include<iostream>
using namespace std;
int g[110][110];
int visited_1[110][110];
int visited_2[110][110];
int N,M;
int dir[4][2]={0,1,0,-1,-1,0,1,0};
void dfs_1(int x,int y){visited_1[x][y]=1;for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited_1[next_x][next_y]&&g[next_x][next_y]>=g[x][y]){dfs_1(next_x,next_y);}}
}
void dfs_2(int x, int y){visited_2[x][y]=1;if(visited_1[x][y]){printf("%d %d\n",x,y);}for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited_2[next_x][next_y]&&g[next_x][next_y]>=g[x][y]){dfs_2(next_x,next_y);}}
}int main(){cin>>N>>M;for(int i=0;i<N;i++){for(int j=0;j<M;j++){scanf("%d",&g[i][j]);}}for(int i=0;i<N;i++){dfs_1(i,0);}for(int j=0;j<M;j++){dfs_1(0,j);}for(int i=0;i<N;i++){dfs_2(i,M-1);}for(int j=0;j<M;j++){dfs_2(N-1,j);}}

建造最大岛屿

# include<iostream>
using namespace std;
int g[60][60];
int visited[60][60];
int N,M;
int res_tmp=0;
int res=0;
int res_fin=0;
int dir[4][2]={0,1,0,-1,1,0,-1,0};void dfs(int x,int y){visited[x][y]=1;res_tmp++;for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited[next_x][next_y]&&g[next_x][next_y]){dfs(next_x,next_y);}}
}int getres(){res=0;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!visited[i][j]&&g[i][j]){res_tmp=0;dfs(i,j);res=max(res,res_tmp);}}}return 0;
} 
bool check(int x,int y){for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(g[next_x][next_y])return 1;}return 0;
}int main(){cin>>N>>M;bool all_zero=1;for(int i=0;i<N;i++){for(int j=0;j<M;j++){scanf("%d",&g[i][j]);if(g[i][j])all_zero=0;}}if(all_zero){cout<<1;return 0;}getres();res_fin=res;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!g[i][j]&&check(i,j)){g[i][j]=1;getres();res_fin=max(res,res_fin);for(int n=0;n<N;n++){for(int m=0;m<M;m++){visited[n][m]=0;}}g[i][j]=0;}}}cout<<res_fin;}

这个是比较暴力的做法

# include<iostream>
using namespace std;
int g[60][60];
int visited[60][60];
int N,M;
int res_tmp=0;
int res=0;
int res_fin=0;
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int Num[2510]={0};//记录下标对应岛屿编号的面积,从2开始用;
int idx=2;void dfs(int x,int y){visited[x][y]=1;res_tmp++;g[x][y]=idx;for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(!visited[next_x][next_y]&&g[next_x][next_y]){dfs(next_x,next_y);}}
}void getres(){res=0;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!visited[i][j]&&g[i][j]){res_tmp=0;dfs(i,j);res=max(res,res_tmp);Num[idx]=res_tmp;idx++;}}}} 
int check(int x,int y){int tmp=0;int counted[4]={0,0,0,0};for(int i=0;i<4;i++){int next_x=x+dir[i][0];int next_y=y+dir[i][1];if(next_x<0||next_y<0||next_x>=N||next_y>=M)continue;if(g[next_x][next_y]==counted[0])continue;if(g[next_x][next_y]==counted[1])continue;if(g[next_x][next_y]==counted[2])continue;if(g[next_x][next_y]==counted[3])continue;tmp+=Num[g[next_x][next_y]];counted[i]=g[next_x][next_y];}return ++tmp;
}int main(){cin>>N>>M;bool all_zero=1;for(int i=0;i<N;i++){for(int j=0;j<M;j++){scanf("%d",&g[i][j]);if(g[i][j])all_zero=0;}}if(all_zero){cout<<1;return 0;}getres();for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!g[i][j]){res=max(res,check(i,j));}}}// for(int i=0;i<N;i++){//     for(int j=0;j<M;j++){//         printf("%d ",g[i][j]);//     }//     cout<<endl;// }// for(int i=2;i<idx;i++){//     cout<<Num[i]<<" ";// }cout<<res;}

这个很妙

文章来源:https://blog.csdn.net/qq_74420726/article/details/146396972
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1583093.html

相关文章

Qt进程间通信:QSharedMemory 使用详解

1. 什么是 QSharedMemory&#xff1f; QSharedMemory 是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域&#xff0c;从而避免数据传输时的 IO 操作&#xff0c;提高通信速度。通过共享内存&#xff0c;多个进程可以直接读写这块内存&#xff0c;而无需经过文件…

云服务器怎么防御ddos攻击呢?

防御DDoS攻击是保障云服务器稳定运行的关键措施&#xff0c;以下是综合多种防护策略的详细方案&#xff1a; 1. 启用云服务商提供的DDoS防护服务 高防IP/流量清洗&#xff1a; 将业务流量接入云服务商的高防IP&#xff0c;由专业清洗中心过滤恶意流量&#xff0c;仅放行正常请求…

企业内部 Hugging Face NLP 解决方案及示例

一、企业内部 Hugging Face NLP 解决方案 需求涵盖多个方面&#xff1a; 企业文档处理&#xff08;合同、规章制度、技术文件等&#xff09;财务数据分析&#xff08;ERP 业务数据&#xff0c;问答式报告生成&#xff09;数据可视化&#xff08;自动生成图表&#xff09; 为…

go的hooks如何写

在 Go 语言中&#xff0c;实现 Hooks 的方式多样&#xff0c;具体取决于应用场景。以下是几种常见实现方法及示例&#xff1a; 一、函数式 Hooks&#xff08;基础实现&#xff09; 通过函数类型作为参数传递&#xff0c;实现灵活的钩子机制&#xff1a; // 定义钩子函数类型…

19.哈希表的实现

1.哈希的概念 哈希(hash)⼜称散列&#xff0c;是⼀种组织数据的⽅式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系&#xff0c;查找时通过这个哈希函数计算出Key存储的位置&#xff0c;进⾏快速查找。 1.2.直接定址法…

《Python实战进阶》No29: 自动化部署工具:Ansible 与 Fabric

No29: 自动化部署工具&#xff1a;Ansible 与 Fabric 摘要 自动化部署是现代软件开发和运维中的重要环节&#xff0c;能够显著提升效率、减少人为错误。本集将对比两大主流自动化部署工具 Ansible 和 Fabric 的特点&#xff0c;并通过实战案例展示如何使用它们实现高效的自动化…

MySQL: 创建两个关联的表,用联表sql创建一个新表

MySQL: 创建两个关联的表 建表思路 USERS 表&#xff1a;包含用户的基本信息&#xff0c;像 ID、NAME、EMAIL 等。v_card 表&#xff1a;存有虚拟卡的相关信息&#xff0c;如 type 和 amount。关联字段&#xff1a;USERS 表的 V_CARD 字段和 v_card 表的 v_card 字段用于建立…

【后端开发面试题】每日 3 题(十八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12903849.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享后端开发面试中常见的面试题给大家&#xff0c;每天的题目都是独…