首页 > 其他分享 >搜索基础

搜索基础

时间:2024-03-24 15:11:50浏览次数:24  
标签:string int 基础 st continue 搜索 mp include

目录

八皇后

在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n=8, data[N][10], tt;
int a[10]; // a[y] = x   (x,y) 有皇后
int b[10]; // b[y] = 1      (..,y) 有皇后
int c[20], d[20];// 对角线 (x+y), (x-y+n) 

void dfs(int x){// dfs(x) : 当前第 x 行应该放皇后 
    if(x > n){    // 出口
        ++ tt;
//        for(int i=1; i<=n; i++)data[tt][i] = a[i];  return;
//        if(tt > 3) return;
        cout<<"No."<<tt<<endl;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                cout<<(a[j]==i)<<" \n"[j==n];
    } 
    for(int y=1; y<=n; y++)
        if(!b[y] && !c[x+y] && !d[x-y+n]){
            b[y]=c[x+y]=d[x-y+n]=1, a[x]=y;
            dfs(x+1);
            b[y]=c[x+y]=d[x-y+n]=0;
        }
}
int main(){
    dfs(1);
//    int t,x; cin>>t;
//    while(t--){
//        cin>>x;
//        for(int i=1; i<=n; i++) cout<<data[x][i]; cout<<endl;
//    }
    return 0;
}

八数码

在 3×3 的棋盘上,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字。棋盘中留有一个空格,空格用 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。

点击查看代码
#include<bits/stdc++.h>
using namespace std;

string target = "123804765";
int d[][2] = {-1,0,1,0, 0,-1,0,1};

int bfs(string&s){
    unordered_map<string,int> mp;
    queue<string> q; q.push(s), mp[s]=1;
    while(q.size()){
        auto u = q.front(); q.pop();
        if(u == target) return mp[u]-1;
        int  p = u.find('0');
        for(int i=0; i<4; i++){
            int x=p/3+d[i][0], y=p%3+d[i][1];
            if(x<0 || x>=3 || y<0 || y>=3) continue;
            string v=u;
            swap(v[p], v[x*3 + y]);
            if(!mp.count(v)) q.push(v), mp[v]=mp[u]+1; 
        }
    }
    return -1;
}
int main(){
    string s;cin>>s;
    cout<<bfs(s);
    return 0;
}

红与黑

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向上下左右四个方向的相邻的黑色瓷砖移动。

请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

点击查看代码
#include<iostream>
#include<queue>
using namespace std;
const int N=22;
int n,m,ans,d[][2]={-1,0,1,0,0,-1,0,1};
bool st[N][N];
char s[N][N]; // string s[N];

void dfs(int x,int y){
    ans ++, st[x][y] = 1;
    for(int i=0; i<4; i++){
        int a=x+d[i][0], b=y+d[i][1];
        if(a<0||a>=n||b<0||b>=m) continue;
        if(st[a][b] || s[a][b]!='.') continue;
        dfs(a,b);
    }
}
void bfs(int x,int y){
    queue< pair<int,int> > q;
    q.push({x,y}), st[x][y] = 1, ans++;
    while(q.size()){
        auto u = q.front(); q.pop(); x = u.first, y = u.second;
        for(int i=0; i<4; i++){
            int a=x+d[i][0], b=y+d[i][1];
            if(a<0||a>=n||b<0||b>=m) continue;
            if(st[a][b] || s[a][b]!='.') continue;
            q.push({a,b}), st[a][b] = 1, ans ++;
        }
    }
}
int main(){
    cin>>m>>n;
    for(int i=0; i<n; i++) cin>>s[i];
    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++) if(s[i][j]=='@') bfs(i,j);
    cout<<ans;
    return 0;
}

标签:string,int,基础,st,continue,搜索,mp,include
From: https://www.cnblogs.com/hellohebin/p/18092443

相关文章

  • MySQL面试基础题
    MySQL面试基础题一、基础知识1.数据库常见的概念DB:数据库,存储数据的容器。DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB。SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件持有的,而是几乎所有的主流数据库软件通用的语言。中国人之间交流需要......
  • 【机器学习-08】参数调优宝典:网格搜索与贝叶斯搜索等攻略
    超参数是估计器的参数中不能通过学习得到的参数。在scikit-learn中,他们作为参数传递给估计器不同类的构造函数。典型的例子有支持向量分类器的参数C,kernel和gamma,Lasso的参数alpha等。​在超参数集中搜索以获得最佳crossvalidation交叉验证分数的方法是可实现并且推荐的......
  • Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向
    Java基础什么是JavaJava是一种由SunMicrosystems于1995年首次发布的编程语言和计算平台。Java是一种通用的、基于类的、面向对象的编程语言,旨在减少实现依赖性。它是一个应用程序开发的计算平台。Java快速、安全、可靠,因此在笔记本电脑、数据中心、游戏机、科学超级计......
  • [Python]-基础-1.环境部署
    [Python]基础——环境部署&知识补充一、环境部署1.1软件下载1.1.1版本选择内置函数是Python自带的函数,不同版本的Python,其内置函数在数量和使用上大不相同,尤其是Python2和Python3大版本之间的迭代,教程全程采用Python3.8.3进行代码演示,为了避免版本兼容冲突,希望......
  • 电源电路基础知识学习(建议收藏)
    日常生活中,电子产品在工作时都需要直流电源提供激励,而电池因使用成本较高,一般只用于低功耗便携式的仪器设备中。如下图所示,是直流电源的结构及稳压过程:1).电源变压器先将市电转变为较低的目标电压;2).整流电路是将交流电转为具有直流电成分的脉动直流电;3).滤波......
  • JS 二叉搜索树
    Code:classTreeNode{val;left;right;constructor(val,left,right){this.val=val??0;this.left=left?left:null;this.right=right?right:null;}}/***二叉搜索树*/classBinarySearchTree{......
  • PTA基础编程练习题目集 7—4 BCD解密
    题目描述:BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误的十进......
  • angular 基础1
    1.ngIf<div*ngIf="flag"id="11">ngif1</div>2.ngFor<div*ngFor="letitemofbooks;indexasi">{{i+1}}-{{item.name}}</div>3.ngSwith<div[ngSwitch]="expre......
  • 史上最全:PostgreSQL SQL的基础使用及技巧
    1、数据类型总体介绍referto:https://www.postgresql.org/docs/14/datatype.htmlNameAliasesDescriptionbigintint8signedeight-byteintegerbigserialserial8autoincrementingeight-byteintegerbit[(*n*)]fixed-lengthbitstringbitvary......
  • python基础——异常、模块和包、pyecharts
    文章目录一、异常1、异常捕获2、异常传递二、python模块1、概念2、导入方式3、自定义模块4、python包5、导入第三方包三、pyecharts1、概念2、JSON数据格式一、异常1、异常捕获1.基本语法try: 可能发生错误的代码except: 如果出现异常应该执行的代码try: ......