搜索 传染病控制 靶形数独 字串变换

本文介绍了一种解决靶形数独问题的DFS算法,并详细解释了如何通过BFS算法来模拟传染病的扩散过程,同时提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字串变换

这题用string比较简单,string有许多自带函数和性质比较方便,如果用char的话比较麻烦,可是在做这道题的时候不知道这些,然后用char打了个超级麻烦的代码

string支持两个字符串直接相加

s.insert(pos,s2) 

s.substr(pos,len);

s.erase(pos,len);

s.replace(pos,len,s2);

s.find(s2,pos) 如果查找不到返回string::nops

靶形数独

这道题比较简单,dfs参数代表搜到第几个空位置,每一层dfs枚举9--1,然后搜到x==num+1是,ans取max

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int a[10][10],be[10][10],c[10][10];
bool lvis[10][10],hvis[10][10],vis[10][10];
struct node
{
     int x,y;
}t[88];
int num=0,ans;
int cmp(const node &a,const node &b)
{
    return a.y==b.y? a.x<b.x : a.y<b.y;
}
void pre()
{
    c[1][1]=6;c[1][2]=6;c[1][3]=6;c[1][4]=6;c[1][5]=6; c[1][6]=6;c[1][7]=6;c[1][8]=6;c[1][9]=6;
    c[2][1]=6;c[2][2]=7;c[2][3]=7;c[2][4]=7;c[2][5]=7; c[2][6]=7;c[2][7]=7;c[2][8]=7;c[2][9]=6;
    c[3][1]=6;c[3][2]=7;c[3][3]=8;c[3][4]=8;c[3][5]=8; c[3][6]=8;c[3][7]=8;c[3][8]=7;c[3][9]=6;
    c[4][1]=6;c[4][2]=7;c[4][3]=8;c[4][4]=9;c[4][5]=9; c[4][6]=9;c[4][7]=8;c[4][8]=7;c[4][9]=6;
    c[5][1]=6;c[5][2]=7;c[5][3]=8;c[5][4]=9;c[5][5]=10;c[5][6]=9;c[5][7]=8;c[5][8]=7;c[5][9]=6;
    c[6][1]=6;c[6][2]=7;c[6][3]=8;c[6][4]=9;c[6][5]=9; c[6][6]=9;c[6][7]=8;c[6][8]=7;c[6][9]=6;
    c[7][1]=6;c[7][2]=7;c[7][3]=8;c[7][4]=8;c[7][5]=8; c[7][6]=8;c[7][7]=8;c[7][8]=7;c[7][9]=6;
    c[8][1]=6;c[8][2]=7;c[8][3]=7;c[8][4]=7;c[8][5]=7; c[8][6]=7;c[8][7]=7;c[8][8]=7;c[8][9]=6;
    c[9][1]=6;c[9][2]=6;c[9][3]=6;c[9][4]=6;c[9][5]=6; c[9][6]=6;c[9][7]=6;c[9][8]=6;c[9][9]=6;
}
void read()
{
     for(int i=1;i<=3;i++)
       for(int j=1;j<=9;j++) 
       {
           if(j<=3) {be[i][j]=1;continue;}
           if(j<=6) {be[i][j]=4;continue;}
           if(j<=9) {be[i][j]=7;continue;}
       }
     for(int i=4;i<=6;i++)
       for(int j=1;j<=9;j++)
       {
           if(j<=3) {be[i][j]=2;continue;}
           if(j<=6) {be[i][j]=5;continue;}
           if(j<=9) {be[i][j]=8;continue;}    
       }
     for(int i=7;i<=9;i++)
       for(int j=1;j<=9;j++)
       {
           if(j<=3) {be[i][j]=3;continue;}
           if(j<=6) {be[i][j]=6;continue;}
           if(j<=9) {be[i][j]=9;continue;}    
       }
     for(int i=1;i<=9;i++)
      for(int j=1;j<=9;j++){ 
        scanf("%d",&a[i][j]);
        if(a[i][j]!=0) lvis[j][a[i][j]]=1;hvis[i][a[i][j]]=1;vis[be[i][j]][a[i][j]]=1;
        if(a[i][j]==0) { num++;t[num].x=i;t[num].y=j; }
      }
     sort(t+1,t+num+1,cmp);
}
int op=0;
void dfs(int now)
{
    if(now==num+1){ ans=max(ans,op); return ; }
    int x=t[now].x,y=t[now].y;
    for(int i=9;i>=1;i--)
    if(lvis[y][i]==0&&hvis[x][i]==0&&vis[be[x][y]][i]==0){
       lvis[y][i]=1; hvis[x][i]=1; vis[be[x][y]][i]=1;
       op+=c[x][y]*i;
       dfs(now+1);
       lvis[y][i]=0; hvis[x][i]=0; vis[be[x][y]][i]=0;
       op-=c[x][y]*i;
    }
}
int main()
{
    pre();
    read();
    ans=-1;
    dfs(1);
    if(ans==-1) printf("%d",ans);
    else{
     for(int i=1;i<=9;i++)
      for(int j=1;j<=9;j++)
       if(a[i][j]) ans+=a[i][j]*c[i][j];
     printf("%d",ans);
    }
    return 0;
}

传染病控制

bfs按深度记录节点,传染病会随着深度扩散,显然每层深度的所有节点中只有一个节点到他父亲的边会被切断,

对于一个节点如果他到他父亲的边被切断,标记一下,然后搜到每一层的时候,先下传标记,即

if(vis[fa[x]]==1) vis[x]=1;

用这一层节点数-被标记的点数-1就是这一层会被感染的节点数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define maxn 305
using namespace std;
int n,p;
int ans,maxdeep,op=0;
struct edge
{
    int to,ne;  
}b[maxn*2];
vector< int > v[maxn];
int k=0,head[maxn],fa[maxn],d[maxn],sz[maxn];
bool vis[maxn];
int cmp(const int &a,const int &b){
    return sz[a]>sz[b];
}
void dfs1(int x,int father,int deep)
{
     fa[x]=father;sz[x]=1;d[x]=deep;
     v[deep].push_back(x);
     for(int i=head[x];i!=-1;i=b[i].ne)
      if(b[i].to!=fa[x]){ dfs1(b[i].to,x,deep+1);  sz[x]+=sz[b[i].to]; }
     maxdeep=max(maxdeep,deep);
}
void add(int u,int v)
{
     k++;
     b[k].to=v;b[k].ne=head[u];head[u]=k;
}
void read()
{
     memset(head,-1,sizeof(head));
     scanf("%d%d",&n,&p);
     int x,y;
     for(int i=1;i<=p;i++){
        scanf("%d%d",&x,&y);
        add(x,y); add(y,x);
     }
     dfs1(1,0,0);
     for(int i=1;i<=maxdeep;i++)
      sort(v[i].begin(),v[i].end(),cmp); 
}
void dfs(int x)
{
     if(op>ans) return;
     if(x>maxdeep){ ans=min(op,ans);  return; }
     if(v[x].empty()==1) return ; 
     int js=0;
     for(int i=0;i<v[x].size();i++)
     {
        int t=v[x][i];
        if(vis[fa[t]]==1) vis[v[x][i]]=1;
        if(vis[v[x][i]]==0) js++;     
     }
     if(js==0) ans=min(ans,op); 
     for(int i=0;i<v[x].size();i++)
        if(vis[v[x][i]]==0){
           op+=(js-1);
           vis[v[x][i]]=1;
           dfs(x+1);
           op-=(js-1);
           vis[v[x][i]]=0;
        } 
     for(int i=0;i<v[x].size();i++)
     {
        int t=v[x][i];
        if(vis[fa[t]]==1) vis[v[x][i]]=0;
     }
}
int main()
{
     read();
     ans=n;op=1;
     dfs(1);
     printf("%d",ans);
     return 0;
}
 




内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值