• Bio

    //2792 - □□□ + □□□ = □□□ #include<bits/stdc++.h> using namespace std; int n, a[10], f[10], total = 0; void dfs(int ______) { //递归的深度 int i; //当深度为 10 时,说明前面 9 个格子已经全部被填写完成 if (step == ______) { //开始验证当前方案是否可行 if (a[1] * 100 + a[2] * 10 + a[3] + a[4] * 100 + a[5] * 10 + a[6] == a[7] * 100 + a[8] * 10 + a[9]) ______; ______; } //说明当前方案还没有被完全填充 for (i = ______; i <= ; i++) { if () { //检验方案是否合法:对于每一张卡牌,都去看一下当前这张卡牌是否可以使用 ____________; //把这张卡牌放在当前深度的这个位置上 ____________; //标记当前卡牌被使用过了 ____________; //继续看下一个格子 ____________; //回溯:再把这张卡牌拿回来,表示这张卡牌又可以重新使用了 } } return; } int main() { dfs(1); printf("total = %d", ____________); return 0; } 深搜基础(排列型枚举和组合型枚举) //排列型枚举 int n,a[15],f[15]; void dfs(int k){ if(k==n+1){ for(int i=1;i<=n;i++) cout<<a[i]<<" "; printf("\n"); return; } for(int i=1;i<=n;i++){ if(f[i]0){//如果这个数还没有被用过 a[k]=i; f[i]=1;//标记这个数被使用了 dfs(k+1); f[i]=0;//这里是这个代码非常关键的地方,这一步叫做还原现场 } } } int main(){ cin>>n; dfs(1); return 0; } //组合型枚举 int n,f[20]; void dfs(int k){ if(kn+1){//边界条件,根据f[i]数组打印子集 for(int i=1;i<=n;i++){ if(f[i]==1){ cout<<i<<" "; } } cout<<endl; return; } f[k]=1;//选择第cur个元素 dfs(k+1); f[k]=0;//不选第cur个元素 dfs(k+1); } int main(){ cin>>n; dfs(1); return 0; } 网格图上搜索(DFS) //【深度优先搜索模板】 #include<bits/stdc++.h> #define int long long #define endl '\n' #define rep(i, l, r) for (int i = (l); i <= (r); ++i) #define per(i, r, l) for (int i = (r); i >= (l); --i) #define each(x, v) for (auto& x : (v)) #define debug(x) cerr<<"line "<<LINE<<" "<<#x<<":"<<x<<endl using namespace std; const int N = 55; int a[N][N], f[N][N]; int n, m, p, q, minStep = INT_MAX; int nxt[4][2] = { { 0, 1 }, //向右走 { 1, 0 }, //向下走 { 0, -1 }, //向左走 {-1, 0 }}; //向上走 void dfs(int x, int y, int step) { //判断是否到达位置 if (x == p && y == q) { if (step < minStep) minStep = step; return; } //枚举 4 种走法 int tx, ty, k; for (k = 0; k <= 3; ++k) { //计算下一个点的坐标 tx = x + nxt[k][0], ty = y + nxt[k][1]; //判断是否越界 if (tx < 1 || tx > n || ty < 1 || ty > m) continue; //判断该店是否为障碍物或者已经在路径中了 if (a[tx][ty] == 0 && f[tx][ty] == 0) { //标记这个点已经走过了 f[tx][ty] = 1; //开始尝试下一个点 dfs(tx, ty, step + 1); //尝试结束,取消这个点的标记 f[tx][ty] = 0; } } return; } signed main(){ ios::sync_with_stdio(0), cin.tie(nullptr), cout.tie(nullptr); cin >> n >> m; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) cin >> a[i][j]; int startx, starty; cin >> startx >> starty >> p >> q; //从起点开始搜索(标记点已经在路径中了,防止后面重复走) f[startx][starty] = 1; //深搜(起点 x 坐标,起点 y 坐标,初始步数为 0) dfs(startx,starty,0); //输出最短步数 cout << minStep; return 0; } #include<bits/stdc++.h>

    #define endl '\n'//用转义字符 '\n' 代替 endl using namespace std; signed main(){

    ios::sync_with_stdio(0);//关闭文件同步流 
    cin.tie(nullptr), cout.tie(nullptr);	//设置cin和cout等待时间为 0 
    return 0;
    

    } #include <bits/stdc++.h> using namespace std; const int N = 1e3 + 5; int dx[]={-1,0,1,0}, dy[]={0,1,0,-1}; int n,vis[N][N]; char g[N][N]; void dfs(int x,int y){ vis[x][y]=1; for(int i=0;i<4;i++){ int nx=x+dx[i], ny=y+dy[i]; //越界 已走过 不是陆地 if(nx<1||nx>n||ny<1||ny>n || vis[nx][ny] || g[nx][ny]!='#') continue; dfs(nx,ny); } } bool check(int x,int y){ if(g[x][y]!='#') return 0;//不是陆地 for(int i=0;i<4;i++){ int nx=x+dx[i], ny=y+dy[i]; if(nx<1||nx>n||ny<1||ny>n) continue; if(g[nx][ny]'.') return 1; } return 0; } int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>g[i][j]; //1.统计淹没前的岛屿数量,dfs int ans1=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!vis[i][j] && g[i][j]'#'){ dfs(i,j); ans1++; } //2.淹没。遍历,标记淹没的岛屿为'' for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(check(i,j)) g[i][j]=''; memset(vis,0,sizeof(vis)); //3.统计淹没后的岛屿数量,dfs int ans2=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(!vis[i][j] && g[i][j]=='#') { dfs(i,j); ans2++; } } } cout<<ans1-ans2; return 0; } 😘😒😎💋👏💋👏💋🎶🐱‍👤🐱‍🐉🐱‍💻🐱‍👓🙌🐱‍🐉🤷‍♂️😉👀🤞🤦‍♂️😉 🤷‍♂️😉💕 💋🎉🐱‍🐉🐱‍🏍🎉💖👏😢✌👏😢🎂😜🎉🤳😉😁🤣👌😁🤣🎉💋🐱‍💻😉😎😊 🎉🤳🐱‍👤😜🐱‍🏍💖😜💖😊😉✌😉✌🎉🤞🎶🙌😊😎💕🐱‍💻🤞💖🤷‍♂️🤞🐱‍👓 😘🤗😉😑🤑😌😎😮😋🧓👧🤴👦👳‍♂️👵👮‍♂️👦🕵️‍♀️🕵️‍♂️🧒🧒🎅🧔🧒👳‍♂️👸👩‍🦳👼👩‍⚖️👨‍🌾 🕵️‍♀️🦹‍♀️🕵️‍♀️👶👵👶👵🎅👨‍🦰👮‍♂️👮‍♀️🎈🧨🎊🎨🎭🎡🎭🎟🎑🎎🎉🎆🎠🎢🧶 🕶🥽🌭🍕 🍔🧂🍿🍳🥚🧈🥩🍘🍚🥡🥡🚗🛺🚙🚓🚐🚒🚚🚜🚘🚜🚖🚍🦼🚄🚝🚃🚃🚃🚃 🚃🚃🚠🚝🚃🚈🚝🏍🚅💨☮✝☪🕳⛎💫🛐 🛐🕎 🕎🔯 🚃 ☯☪✡✝☮

  • Stat

  • Rating

  • This person is lazy and didn't write anything.