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

2025程序综合实践第三次DFS2

1、素数环

#include<bits/stdc++.h>
using namespace std;
int a[20];
int b[20];
int cnt=0;
int n;
int isPrime(int x){if(x<=0)return 0;if(x==2)return 1;if(x%2==0)return 0;for(int i=3;i*i<=x;i+=2){if(x%i==0){return 0;}}return 1;
}
void dfs(int k){if(k==n+1){if(isPrime(a[1]+a[n])){cnt++;}return;}for(int i=2;i<=n;i++){if(b[i]==0&&isPrime(i+a[k-1])){a[k]=i;b[i]=1;dfs(k+1);b[i]=0;}}
}
int main(){cin>>n;a[1]=1;b[1]=1;dfs(2);cout<<cnt<<endl;return 0;
}

2、迷宫求路径次数

#include<bits/stdc++.h>
using namespace std;
int m,n,ans;
int a[30][30];
int b[30][30];
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int check(int x,int y){if(b[x][y]==0&&a[x][y]==0&&x>=1&&x<=m&&y>=1&&y<=n){return 1;}else return 0;
}
void dfs(int x,int y){if(x==m&&y==n){ans++;return;}for(int i=0;i<4;i++){int a=x+dir[i][0];int d=y+dir[i][1];if(check(a,d)){b[a][d]=1;dfs(a,d);b[a][d]=0;}}
}
int main(){cin>>m>>n;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}b[1][1]=1;dfs(1,1);cout<<ans;return 0;
}

3、实现迷宫路径判断

#include<bits/stdc++.h>
using namespace std;
int n;                  // 迷宫大小n*n
char a[105][105];       // 存储迷宫地图
int b[105][105];        // 标记是否访问过
int ha, la, hb, lb;     // 起点和终点坐标
int flag;               // 标记是否找到路径
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};  // 四个方向// 检查坐标是否合法且可通行
int check(int x,int y){if(b[x][y]==0 && a[x][y]=='.' && x>=0 && x<n && y>=0 && y<n){return 1;}else return 0;
}// DFS搜索路径
void dfs(int x,int y){// 如果到达终点,标记找到路径if(x==hb && y==lb){flag=1;return;}// 如果已经找到路径,提前返回if(flag) return;// 尝试四个方向for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];if(check(nx,ny)){b[nx][ny]=1;  // 标记为已访问dfs(nx,ny);// 不需要回溯标记,因为只要找到一条路径即可if(flag) return;  // 找到路径后提前返回}}
}int main(){int k;  // 测试数据组数cin>>k;while(k--){cin>>n;// 读取迷宫for(int i=0;i<n;i++){cin>>a[i];}// 读取起点和终点cin>>ha>>la>>hb>>lb;// 初始化标记数组和结果标记memset(b,0,sizeof(b));flag=0;// 检查起点和终点是否可通行if(a[ha][la]!='.' || a[hb][lb]!='.'){cout<<"NO"<<endl;continue;}// 从起点开始DFSb[ha][la]=1;dfs(ha,la);// 输出结果if(flag) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}

4、走迷宫

#include<bits/stdc++.h>
using namespace std;
int R,C,ans;
char a[45][45];  // 存储迷宫
int b[45][45];  // 存储步数,同时标记是否访问过
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};// 检查坐标是否合法且可通行
int check(int x,int y){if(b[x][y]==0 && a[x][y]=='.' && x>=0 && x<R && y>=0 && y<C){return 1;}else return 0;
}// BFS寻找最短路径
void bfs(){// 使用队列存储坐标,用结构体数组模拟队列操作struct Node {int x; int y;} q[1605];  // 最大可能节点数为40*40=1600int head=0,tail=0;// 起点入队(左上角)q[tail].x=0;q[tail].y=0;tail++;b[0][0]=1;  // 起点步数为1while(head<tail){// 取出队首元素int x=q[head].x;int y=q[head].y;head++;// 如果到达终点(右下角),记录答案并返回if(x==R-1 && y==C-1){ans=b[x][y];return;}// 尝试四个方向for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];if(check(nx,ny)){b[nx][ny]=b[x][y]+1;  // 步数加1q[tail].x=nx;q[tail].y=ny;tail++;}}}
}int main(){cin>>R>>C;// 读取迷宫for(int i=0;i<R;i++){cin>>a[i];}// 初始化步数数组for(int i=0;i<R;i++){for(int j=0;j<C;j++){b[i][j]=0;}}// 求解最短路径bfs();// 输出结果cout<<ans<<endl;return 0;
}

5、n皇后

#include<bits/stdc++.h>
using namespace std;
int n;
int a[10];
int cnt=0;
int check(int r,int c){for(int i=0;i<r;i++){if(a[i]==c||abs(i-r)==abs(a[i]-c)){return 0;}	}return 1;
}
void dfs(int r){if(r==n){cnt++;for(int i=0;i<n;i++){cout<<a[i]+1<<" ";}cout<<endl;return;}for(int c=0;c<n;c++){if(check(r,c)){a[r]=c;dfs(r+1);}}
}
int main(){cin>>n;dfs(0);cout<<cnt<<endl;return 0;
}

6、blocks积木

#include<bits/stdc++.h>
using namespace std;
char a[4][6];
bool b[4];
string words;
bool f;
void dfs(int p){if(p==words.size()){f=true;return;}for(int i=0;i<4;i++){if(b[i])continue;for(int j=0;j<6;j++){if(a[i][j]==words[p]){b[i]=true;dfs(p+1);if(f)return;b[i]=false;}}}
}
int main(){int n;cin>>n;for(int i=0;i<4;i++){cin>>a[i];}for(int i=0;i<n;i++){cin>>words;if(words.size()>4){cout<<"NO"<<endl;continue;}f=false;for(int j=0;j<4;j++){b[j]=false;}dfs(0);if(f){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}

http://www.dtcms.com/a/478147.html

相关文章:

  • 记录一次前端文件缓存问题
  • 深度预测调和网络(DFRN)医疗应用编程路径分析
  • bkhtmltopdf - 高性能 HTML 转 PDF 工具(代替 wkhtmltopdf)
  • OpenCV基础入门2
  • 数据结构——二叉树的从前序与中序遍历序列构造二叉树
  • 做网站要用到的技术网站维护主要做哪些
  • 聚焦string:C++ string 核心接口、编译器差异与自定义实现的深度剖析
  • 【Java集合体系】全面解析:架构、原理与实战选型
  • 999免费的网站北京网站设计方案
  • 复制和粘贴快捷键ctrl加什么?【图文详解】电脑复制粘贴快捷键?剪贴板历史记录?电脑快捷键大全?快捷键操作?
  • 手机网站样式专门做婚庆的网站
  • 知识付费产品:如何与用户建立长期价值共生关系?
  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:音频接口
  • Redis -持久化
  • [css]基础知识和常见应用
  • 电子商务网站的建设费用案例涿州网站建设
  • 企业网站推广哪家公司好惠州网站建设方案外包
  • 容器管理不再受限!PortainerCE+cpolar打造云端数字指挥中心
  • 无人机抗电磁干扰机理与抗干扰技术研究综述
  • Spring Batch 容错机制分析
  • 【C++ Primer】第三章:字符串、向量与数组
  • Allegro X Advanced Designer 23.1 设计约束
  • 【Leetcode hot 100】4.寻找两个正序数组的中位数
  • HTB 赛季9靶场 - Signed
  • 任务栏透明度调节工具
  • 网站企业电子商务网站建设教学计划
  • 淘宝一番赏抽赏小程序:开启趣味抽赏新体验
  • 上海专业网站建站扬州北京网站建设
  • HTTP初识(二)
  • 【10 分钟!M4 Mac mini 离线部署「私有 ChatGPT」完整实录】