搜索与图论复习1

ops/2025/2/5 15:05:23/

1深度优先遍历DFS  2宽度优先遍历BFS  3树与图的存储  4树与图的深度优先遍历  5树与图的宽度优先遍历  6拓扑排序

1DFS:

#include<bits/stdc++.h>
using namespace std;
const int N=10;
int n;
int path[N];
bool st[N];
void dfs(int u){if(n==u){for(int i=0;i<n;i++)cout<<path[i]<<" ";cout<<endl;return ;}for(int i=1;i<=n;i++){if(!st[i]){//第i个没用过 path[u]=i;st[i]=true;dfs(u+1);st[i]=false;}}
}
int main(){cin>>n;dfs(0);return 0;
}

 acwing843

#include<bits/stdc++.h>
using namespace std;
const int N=20;
int n;
char g[N][N];
bool col[N],dg[N],udg[N];//列,左斜,右斜 
void dfs(int u){if(n==u){for(int i=0;i<n;i++)cout<<g[i]<<endl;cout<<endl;return ;}for(int i=0;i<n;i++){if(!col[i]&&!dg[u+i]&&!udg[n-u+i]){g[u][i]='Q';col[i]=dg[u+i]=udg[n-u+i]=true;dfs(u+1);col[i]=dg[u+i]=udg[n-u+i]=false;g[u][i]='.';}}
}
int main(){cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n;j++){g[i][j]='.';}}dfs(0);return 0;
}

 第二种代码

#include<bits/stdc++.h>
using namespace std;
const int N=20;
int n;
char g[N][N];
bool row[N],col[N],dg[N],udg[N];//行,列,左斜,右斜 
void dfs(int x,int y,int s){if(y==n)y=0,x++;//第一行越界if(x==n){if(s==n){for(int i=0;i<n;i++)cout<<g[i]<<endl;cout<<endl;}return;}//不放皇后 dfs(x,y+1,s);//放皇后if(!row[x]&&!col[y]&&!dg[x+y]&&!udg[x-y+n]){g[x][y]='Q';row[x]=col[y]=dg[x+y]=udg[x-y+n]=true;dfs(x,y+1,s+1);row[x]=col[y]=dg[x+y]=udg[x-y+n]=false;g[x][y]='.';}
}
int main(){cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n;j++){g[i][j]='.';}}dfs(0,0,0);return 0;
}

2BFS:acwing844

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef pair<int,int>PII;
const int N=110;
int n,m;
int g[N][N];
int d[N][N];
PII q[N*N];
int bfs(){int hh=0,tt=0;q[0]={0,0};memset(d,-1,sizeof d);d[0][0]=0;//起点 int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};//四方向量 while(hh<=tt){auto t=q[hh++];for(int i=0;i<4;i++){int x=t.first+dx[i],y=t.second+dy[i];if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]==0&&d[x][y]==-1){//在范围内没走过 d[x][y]=d[t.first][t.second]+1;q[++tt]={x,y};}}}return d[n-1][m-1];//右下角的值 
}
int main(){cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>g[i][j];}}cout<<bfs()<<endl;return 0;
}

acwing845八数码

3树和图的存储和遍历:acwing846DFS

#include<iostream>
#include<cstring>
using namespace std;
const int N=100010,M=N*2;
int n,m;
int h[N],e[M],ne[M],idx;
bool st[N];
int ans=N;//最小的最大值 
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}//以u为根的子树中点的数量
int dfs(int u){st[u]=true;//标记下,已经被搜过了int sum=1,res=0;//当前子树的大小,答案 for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(!st[j]){int s=dfs(j);res=max(res,s);//子树最大值sum+=s;}}res=max(res,n-sum);ans=min(ans,res);return sum; 
} 
int main(){cin>>n;memset(h,-1,sizeof h);for(int i=0;i<n-1;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}dfs(1);cout<<ans<<endl;return 0;
}

acwing847BFS

#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
int n,m;
int h[N],e[N],ne[N],idx;
int q[N],d[N];
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int bfs(){int hh=0,tt=0;q[0]=1;memset(d,-1,sizeof d);d[1]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(d[j]==-1){d[j]=d[t]+1;q[++tt]=j;}}}return d[n];
}
int main(){cin>>n>>m;memset(h,-1,sizeof h);for(int i=0;i<m;i++){int a,b;cin>>a>>b;add(a,b);}cout<<bfs()<<endl;return 0;
}

4拓扑序列---有向图

#include<iostream>
#include<cstring> 
using namespace std;
const int N=100010;
int n,m;
int h[N],e[N],ne[N],idx;
int q[N],d[N];
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool toposort(){int hh=0,tt=-1;for(int i=1;i<=n;i++){if(!d[i])q[++tt]=i;}while(hh<=tt){int t=q[hh++];for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];d[j]--;//入度减 if(d[j]==0)q[++tt]=j;//为0就做起点入队 }}return tt==n-1;//说明全部点进了序列,拓扑序列为队列的序 
}
int main(){cin>>n>>m;memset(h,-1,sizeof(h));for(int i=0;i<m;i++){int a,b;cin>>a>>b;add(a,b);d[b]++;//入度 }if(toposort()){for(int i = 0;i < n;i ++)cout<<q[i]<<" ";cout<<endl;}else cout<<"-1"<<endl;return 0;
}


http://www.ppmy.cn/ops/155901.html

相关文章

基于CY8CKIT-149 BLE HID设备实现及PC控制功能开发(BLE HID+CapSense)

目录 项目介绍硬件介绍项目设计开发环境总体流程图BLE HID触摸按键与滑条 功能展示项目总结 &#x1f449; 【Funpack4-1】基于CY8CKIT-149 BLE HID设备实现及PC控制功能开发 &#x1f449; Github: EmbeddedCamerata/CY8CKIT-149_ble_hid_keyboard 项目介绍 基于英飞凌 CY8CK…

socket实现HTTP请求,参考HttpURLConnection源码解析

背景 有台服务器&#xff0c;网卡绑定有2个ip地址&#xff0c;分别为&#xff1a; A&#xff1a;192.168.111.201 B&#xff1a;192.168.111.202 在这台服务器请求目标地址 C&#xff1a;192.168.111.203 时必须使用B作为源地址才能访问目标地址C&#xff0c;在这台服务器默认…

【含文档+PPT+源码】基于小程序的智能停车管理系统设计与开发

项目介绍 本课程演示的是一款基于小程序的智能停车管理系统设计与开发&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3…

NSSCTF Pwn [SWPUCTF 2022 新生赛]shellcode?题解

下载 exeinfo checksec 开启了NX PIE 64位 查看main函数&#xff1a; 发现有个mmap函数 查一下&#xff1a; 在固定地址 0x30303000 处创建 4KB 的匿名内存映射&#xff0c;具有可读、写、执行权限 所以将shellcode直接写到上面就能执行 exp&#xff1a; from pwn import …

(15)基于状态方程的单相自耦变压器建模仿真

1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿&#xff0c;命名为“PPT.pptx”&#xff08;“.pptx”为扩展名&#xff09;新建幻灯片 开始→版式“PPT_素材.doc…

llama.cpp GGML Quantization Type

llama.cpp GGML Quantization Type 1. GGML Quantization Type2. static const struct ggml_type_traits type_traits[GGML_TYPE_COUNT]3. Q#_K_M and Q#_KReferences 什么神仙妖魔&#xff0c;不过是他们禁锢异族命运的枷锁&#xff01; GGUF https://huggingface.co/docs/hu…

部署keepalvied+lVS(dr)高可用集群

第一步&#xff0c;环境准备 服务器名称 IP 描述 master VIP:192.168.244.100 DIP:192.168.244.101 高可用keeplived_master LVS负载均衡 backup VIP:192.168.244.100 DIP:192.168.244.102 高可用keeplived_backup LVS负载均衡 server1 RIP:192.168.244.103 Web服务…