• DFS题目总结


    ZOJ 1002 Fire Net



    AC代码:

    #include<iostream>
    using namespace std;
    int n;
    int ans;
    char map[10][10];
    bool check(int x,int y);
    void dfs(int point,int sum);
    int main()
    {
        while(scanf("%d",&n)!= EOF)
        {
            if(n==0)
                break;
            getchar();
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                    scanf("%c",&map[i][j]);
                getchar();
            }
            ans = 0;
            dfs(0,0);
            printf("%d
    ",ans);
        }
        return 0;
    }
    bool check(int x,int y)
    {
        bool flag = true;
        for(int i=x;i>=0;i--)
        {
            if(map[i][y]=='X')
                break;
            else if(map[i][y]=='b')
            {
                flag = false;
                break;
            }
        }
        for(int i=y;i>=0;i--)
        {
            if(map[x][i]=='X')
                break;
            else if(map[x][i]=='b')
            {
                flag = false;
                break;
            }
        }
        return flag;
    }
    void dfs(int point,int sum)
    {
        if(point == n*n)
        {
            if(sum>ans)
                ans = sum;
            return;
        }
        int x = point/n;
        int y = point%n;
        if(map[x][y]=='.'&&check(x,y))
        {
            map[x][y]='b';
            dfs(point+1,sum+1);
            map[x][y]='.';
        }
            dfs(point+1,sum);
    }
    

    HDU 1016 Prime Ring Problem



    AC代码:

    #include<iostream>
    #include<cmath>
    #include<vector>
    using namespace std;
    int n;
    vector<vector<int>> res;
    vector<int> nums;
    bool visit[30];
    bool sumPrime(int x);
    void DFS();
    void dfs(vector<int> path);
    int main()
    {
        int i=0;
        fill(visit,visit+n,false);
        while(scanf("%d",&n)!=EOF)
        {
            i++;
            res.clear();
            DFS();
            printf("Case %d:
    ",i);
            for(int i=0;i<res.size();i++)
            {
                for(int j=0;j<n;j++)
                {
                    printf("%d",res[i][j]);
                    if(j!=n-1)
                        printf(" ");
                }
                printf("
    ");
            }
            printf("
    ");
        }
        return 0;
    }
    bool sumPrime(int x)
    {
        for(int i=2;i<=sqrt(x);i++)
            if(x%i==0)
                return false;
        return true;
    }
    void DFS()
    {
        vector<int> path;
        path.push_back(1);
        dfs(path);
        return;
    }
    void dfs(vector<int> path)
    {
        if(path.size()==n)
        {
            if(sumPrime(path[n-1]+1))
                res.push_back(path);
            return;
        }
        for(int j=2;j<=n;j++)
        {
            if(visit[j]==false&&sumPrime(path[path.size()-1]+j))
            {
                path.push_back(j);
                visit[j]=true;
                dfs(path);
                path.pop_back();
                visit[j]=false;
            }
        }
        return;
    }
    
  • 相关阅读:
    技术博客之Saju M
    Dajax 的安装以及详细使用
    当我感觉厌倦的时候
    2014年3月22日 星期日
    windows 7远程桌面访问 ubuntu12.04
    promise的用法
    for循环中匿名同步
    开启Group Work Site功能
    Jquery根据属性模糊查询节点
    设置用户字段
  • 原文地址:https://www.cnblogs.com/CuteyThyme/p/12678691.html
Copyright © 2020-2023  润新知