zoukankan      html  css  js  c++  java
  • 洛谷 P1129 [ZJOI2007]矩阵游戏

    题目描述

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:

    行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)

    列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色)

    游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。

    对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。

    输入输出格式

    输入格式:

    第一行包含一个整数T,表示数据的组数。

    接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

    输出格式:

    包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

    输入输出样例

    输入样例#1:
    2
    2
    0 0
    0 1
    3
    0 0 1
    0 1 0
    1 0 0
    
    输出样例#1:
    No
    Yes
    

    说明

    对于20%的数据,N ≤ 7

    对于50%的数据,N ≤ 50

    对于100%的数据,N ≤ 200

    可以看出目标状态每行只有一个点

    所以我们每次只移动一个点就好了

    最后判断是否移动n个点就好了

    屠龙宝刀点击就送

    #include <cstring>
    #include <cstdio>
    #define N 205
    bool vis[N];
    int T,n,Map[N][N],ans,ok[N];
    bool dfs(int x)
    {
        for(int i=1;i<=n;++i)
        if(Map[x][i]&&!vis[i])
        {
            vis[i]=1;
            if(!ok[i]||dfs(ok[i]))
            {
                ok[i]=x;
                return true;
            }
        }
        return false;
    }
    int main()
    {
        scanf("%d",&T);
        for(;T--;)
        {
            scanf("%d",&n);
            memset(ok,0,sizeof(ok));
            for(int i=1;i<=n;++i)
             for(int j=1;j<=n;++j)
              scanf("%d",&Map[i][j]);
            ans=0;
            for(int i=1;i<=n;++i)
            {
                memset(vis,0,sizeof(vis));
                if(dfs(i)) ans++;
            }
            if(ans==n) puts("Yes");
            else puts("No");
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7421298.html
Copyright © 2011-2022 走看看