• 著名医生的药方(深搜)


    #include<iostream>
    using namespace std;
    int fw[50][50];
    int know[50],res[50];
    int p,n;
    int visited[50];
    int flag[50];
    int search(int f,int r)
    {
        int i;
        if(r>p)
        {
            cout<<res[1];
            for(i=2;i<=p;i++)
                cout<<" "<<res[i];
            cout<<endl;
            return true;
        }
        if(know[r]!=0&&know[r]!=f)
            return false;
        if(know[r]!=0&&know[r]==f&&visited[f]==0)
        {   
            res[r]=know[r];
            if(r>1)
            {
                for(i=1;i<=n;i++)
                    if(fw[res[r-1]][i]!=0)
                    {
                        if(visited[fw[res[r-1]][i]]==0)
                        visited[fw[res[r-1]][i]]=f;
                    }
                    else
                        break;
            }
            for(i=1;i<=n;i++)
                if(fw[f][i]!=0)
                {    if(search(fw[f][i],r+1))
                        break;
                }
                else
                   break;
                if(r>1)
                {
                    for(i=1;i<=n;i++)
                        if(fw[res[r-1]][i]!=0)
                        {   
                            if(visited[fw[res[r-1]][i]]==f)
                            visited[fw[res[r-1]][i]]=0;
                        }
                        else
                            break;
                }
        }
        else
            if(know[r]==0&&visited[f]==0&&flag[f]==0)
            {
                res[r]=f;
                visited[f]=f;
                if(r>1)
                {
                     for(i=1;i<=n;i++)
                        if(fw[res[r-1]][i]!=0)
                        {
                            if(visited[fw[res[r-1]][i]]==0)
                                  visited[fw[res[r-1]][i]]=f;
                        }
                        else
                            break;
                }
                for(i=1;i<=n;i++)
                {
                    if(fw[f][i]==0)
                        break;
                    else
                    {
                        int ff=fw[f][i];
                        if(search(ff,r+1))
                            break;
                    }
                }
                visited[f]=0;
                if(r>1)
                {
                     for(i=1;i<=n;i++)
                        if(fw[res[r-1]][i]!=0)
                        {   if(visited[fw[res[r-1]][i]]==f)
                            visited[fw[res[r-1]][i]]=0;
                        }
                        else
                            break;
                }
    
            }
            
            return false;
    }
    int main()     
    {              
        while(cin>>n)
        {          
            memset(flag,0,sizeof(flag));
            memset(visited,0,sizeof(visited));
            memset(fw,0,sizeof(fw));
            int i;  
            for(i=1;i<=n;i++)
            {      
                int k,j;
                cin>>k;
                for(j=1;j<=k;j++)
                    cin>>fw[i][j];
            }      
            cin>>p;
            for(i=1;i<=p;i++)
            {  cin>>know[i];flag[know[i]]=1;}
            for(i=1;i<=n;i++)
                search(i,1);
        }
        return 0;
    }
  • 相关阅读:
    Debian9 挂载本地ISO当镜像源
    debian9使用ls命令显示文件和文件夹颜色
    debian无法使用netstat
    debian9修改MariaDB用户密码和配置
    python2安装mysqlclient报错EnvironmentError: mysql_config not found
    debian9部署python2虚拟环境
    Debian9安装MariaDB
    Debian9配置网络源
    向日葵远程按键失灵
    Debian9修改时区
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2540746.html
Copyright © 2020-2023  润新知