求助
  • 板块灌水区
  • 楼主yyz38
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/4 11:09
  • 上次更新2024/8/4 13:02:41
查看原帖
求助
1122958
yyz38楼主2024/8/4 11:09

P1132迭代加深40分,3个TLE

#include<bits/stdc++.h> 
using namespace std;
//检查数字字符串是否有效(不包含0)
bool isValid(const string& num) 
{
    return num.find('0')==string::npos;
}
vector<string> nxtnum(const string& num,int maxLen)//生成下一个可能的数字 
{
    vector<string> result;
    int n=num.size();
    //规则1:交换任意两位
    for(int i=0;i<n;i++) 
	{
        for(int j=i+1;j<n;j++) 
		{
            string newNum=num;
            swap(newNum[i],newNum[j]);
            if(isValid(newNum)) 
				result.push_back(newNum);
        }
    }
    //规则2:删除任意一位
    for(int i=0;i<n;i++) 
	{
        string newNum=num.substr(0,i)+num.substr(i+1);
        if(isValid(newNum)) 
			result.push_back(newNum);
    }
	//规则3:在相邻两位之间插入一个数字
    if(n<maxLen)
        for(int i=0;i<n-1;i++)
            for(char c=num[i]+1;c<num[i+1];++c) 
			{
                string newNum=num.substr(0,i+1)+c+num.substr(i+1);
                if(isValid(newNum)) 
					result.push_back(newNum);
            }
    return result;
}
int iddfs(const string& start,const string& target,int maxLen) 
{
    for(int depth=0;depth<=30;depth++)
	{
        unordered_set<string> visited;
        queue<pair<string,int>> q;
        q.push({start,0});
        visited.insert(start);
        while(!q.empty()) 
		{
            string current=q.front().first;
            int steps=q.front().second;
            q.pop();
            if(current==target) 
				return steps;
            if(steps==depth) 
				continue;
            for(const string&next:nxtnum(current,maxLen))
                if(visited.find(next)==visited.end()) 
				{
                    visited.insert(next);
                    q.push({next,steps+1});
                }
        }
    }
    return -1;
}
int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    string s;
    cin>>s;
    int maxLen=s.size();
    int m;
    cin>>m;
    while(m--)
	{
        string t;
        cin>>t;
        cout<<iddfs(s,t,maxLen)<<endl;
    }
    return 0;
}
2024/8/4 11:09
加载中...