蓝桥练1

分考场
搜索

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

int n,m;

int vis[101][101];
int a[101][101];
int ans=100;

void dfs(int ca,int id){
    if(ca>=ans)return;
	if(id>n){
		ans=min(ans,ca);
		return;
	}
	int i,capos;
    for(i=1;i<=ca;i++){
        int capos=1;
        while(a[i][capos]&&!vis[id][a[i][capos]])capos++;
        if(a[i][capos]==0){
            a[i][capos]=id;
            dfs(ca,id+1);
           a[i][capos]=0;
        }
    }
    a[ca+1][1]=id;
    dfs(ca+1,id+1);
    a[ca+1][1]=0;
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		vis[a][b]=1;
        vis[b][a]=1;
	}
	dfs(1,1);
	cout<<ans;
	return 0;
}

青蛙跳杯子
bfs

点击查看代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 2e5 + 9, inf = 8e18;

//一开始我还寻思着怎么会用到bfs呢,原来和深搜不一样,广搜在做这类模板题时直接跑出了最优解
//需要注意的是题面上是老鼠在跳,其实实际过程中就是杯子和老鼠在交换位置
//这时我们发现其实就只是杯子的位置在遍历搜索,所有广搜直接遍历出最优解返回了
//但map存的就不是我所理解的只会出现一种答案,而是遍历步数的过程
//纯板子题
string a, b; 
int n, d[6] = {-1,1,2,-2,3,-3};
map<string,int> mp;//注意每种情况都是一种结果,但是我们广搜直接出了最优解,所以用string标记整个字符串
void bfs()
{
    queue<string> q;
    q.push(a);
    //mp[a] = 0;无需初始化
    
    while(q.size())
    {
        string ss = q.front();
        q.pop();
        int cnt = mp[ss];
        int x = ss.find('*');//找到杯子的位置
        for(int i = 0; i < 6; i ++)
        {
            int dx = x + d[i];
            if(dx >= 0 && dx < n)
            {
                swap(ss[dx],ss[x]);//破案了,我是个sb,遍历的是队头元素,对队头元素进行操作
                
                if(!mp.count(ss))
                {
                    mp[ss] = cnt + 1;
                    if(ss == b)
                    {
                        cout << mp[ss] << '\n';
                        return;
                    }
                    q.push(ss);//入队此种情况后,再进行还原,保证走的每一步都入队,方便后续入队
                }
                swap(ss[dx],ss[x]);
            }
        }
    }
}

void solve()
{
    cin >> a >> b;
    n = a.size();
    bfs();
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _= 1;
    //cin >> _;
    while(_ --)
    {
        solve();
    }
    return 0;
}
posted @ 2025-03-05 20:33  冬天的睡袋  阅读(5)  评论(0)    收藏  举报