zoukankan      html  css  js  c++  java
  • PAT天梯赛L3-015 球队食物链

    读题可以知道是DFS,注意一点,题目说的是赢过,所以str[i][j]=‘W',那么g[i][j]=1,str[i][j]='L',g[j][i]=1

    然后就常规搜索即可,还有一点就是剪枝,如果没有可以回到0的点,就直接返回。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n,g[30][30],tmp[30],flag,vis[30];
     5 char str[30][30];
     6 
     7 void dfs(int k,int step) {
     8     if(flag) return;
     9     tmp[step]=k+1;
    10     if(step==n-1) {
    11         if(g[k][0]) {
    12             flag=1;
    13             return;
    14         }
    15     }
    16     int i;
    17     for(i=1;i<n;i++) {
    18         if(vis[i]==0&&g[i][0]) break;
    19     }
    20     if(i==n) return;
    21     for(i=0;i<n;i++) {
    22         if(g[k][i]&&vis[i]==0) {
    23             vis[i]=1;
    24             dfs(i,step+1);
    25             vis[i]=0;
    26         }
    27     }
    28 }
    29 
    30 int main() {
    31     scanf("%d",&n);
    32     for(int i=0;i<n;i++) {
    33         scanf("%s",str[i]);
    34         for(int j=0;j<n;j++) {
    35             if(str[i][j]=='W') g[i][j]=1;
    36             else if(str[i][j]=='L') g[j][i]=1;
    37         }
    38     }
    39     vis[0]=1;
    40     dfs(0,0);
    41     if(flag) {
    42         for(int i=0;i<n-1;i++) printf("%d ",tmp[i]);
    43         printf("%d",tmp[n-1]);
    44     } else puts("No Solution");
    45 }
  • 相关阅读:
    [转]跨语言通信方案比较
    C#三种定时器
    Java优化技巧
    websocket初探
    [转]远远走来一个绿茶婊
    赠与今年的大学毕业生-----------胡适
    HDU3068 回文串 Manacher算法
    OpenCV安装与配置
    tkinter事件机制
    哈夫曼压缩
  • 原文地址:https://www.cnblogs.com/ACMerszl/p/10483866.html
Copyright © 2011-2022 走看看