zoukankan      html  css  js  c++  java
  • 著名医生的药方(深搜)

    #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;
    }
  • 相关阅读:
    Matlab实现bwlabel函数(区域标记)功能
    Matlab实现medfilt2函数功能
    Matlab实现基于频域对二维信号的低通滤波
    Matlab实现基于频域对一维信号利用傅里叶低通滤波平滑
    Matlab实现直方图规定化
    Matlab实现直方图均衡化
    Matlab实现imresize函数功能
    lc279贪心
    lc347 解法
    numpy中的np.mat(1)
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2540746.html
Copyright © 2011-2022 走看看