zoukankan      html  css  js  c++  java
  • HDU 1181 变形课

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1181

    此题多种方法。比如说Flyod传递闭包 就能搞定 这里只写DFS和BFS

    熟悉下。只有DFS是我写的,其他的都是同学的。

    DFS

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #define N 30
     5 int m[N][N],flag,visit[N];
     6 void dfs(int n)
     7 {
     8     int i;
     9     if(n=='m'-'a')
    10     {
    11         flag=1;return;
    12     }
    13     for(i=0;i<26;i++)
    14     {
    15        if(m[n][i]==1&&!visit[i])
    16        {
    17            visit[i]=1;
    18            dfs(i);
    19        }
    20     }
    21 }
    22 int main()
    23 {
    24     char s[100];int len;
    25     memset(m,0,sizeof(m));
    26     memset(visit,0,sizeof(visit));
    27     while(scanf("%s",s)&&s[0]!='0')
    28     {
    29         len=strlen(s);
    30         m[s[0]-'a'][s[len-1]-'a']=1;
    31         while(scanf("%s",s)&&s[0]!='0')
    32         {
    33             flag=0;
    34             len=strlen(s);
    35             m[s[0]-'a'][s[len-1]-'a']=1;
    36         }
    37         dfs(1);
    38         flag== 1 ? printf( "Yes.\n" ) : printf( "No.\n" );
    39     }
    40     return 0;
    41 }

    BFS

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 int q[100000];
     4 int map[30][30];
     5 int pro[100000];
     6 int f,r;
     7 
     8 int main()
     9 {
    10     int n,i,j,len,leap;
    11     char s[200];
    12     while(scanf("%s",s) != EOF)
    13     {
    14         leap = 0;
    15         memset(map,0,sizeof(map));
    16         memset(pro,0,sizeof(pro));
    17         memset(q,0,sizeof(q));
    18         len = strlen(s);
    19         map[s[0]-'a'][s[len-1]-'a'] = 1;
    20 
    21         while(scanf("%s",s) != EOF)
    22         {
    23             len = strlen(s);
    24             if(s[0] == '0')
    25             break;
    26             map[s[0]-'a'][s[len-1]-'a'] = 1;
    27         }
    28         f = 0,r = 0;
    29         q[r++] = 'b'-'a';
    30         while(f < r)
    31         {
    32             int v;
    33             v = q[f++];
    34             for(i = 0;i < 26;i++)
    35             {
    36                 if(map[v][i] && !pro[i])
    37                 {
    38                     if(i == 'm'-'a')
    39                     {
    40                         leap = 1;
    41                         break;
    42                     }
    43                     q[r++] = i;
    44                     pro[i] = 1;
    45                 }
    46             }
    47             if(leap)
    48             break;
    49         }
    50         if(leap)
    51         puts("Yes.");
    52         else
    53         puts("No.");
    54     }
    55     return 0;
    56 }

    用STL queue实现队列的 BFS

    View Code
     1 #include <queue> 
     2 #include <cstdio> 
     3 #include <cstring> 
     4 #include <iostream> 
     5 using namespace std; 
     6 
     7 const int N=1001; 
     8 int map[N][N]; 
     9 int vis[N]; 
    10 queue<int>q; 
    11 
    12 int bfs() 
    13 { 
    14     while(!q.empty()) 
    15     { 
    16         int a; 
    17         a=q.front(); 
    18         q.pop(); 
    19         for(int i=0;i<26;i++) 
    20         { 
    21             if(map[a][i]&&!vis[i]) 
    22             { 
    23                 if(i=='m'-'a') 
    24                 { 
    25                     return 1; 
    26                 } 
    27                 q.push(i); 
    28                 vis[i]=1; 
    29             } 
    30         } 
    31     } 
    32     return 0; 
    33 } 
    34 
    35 int main() 
    36 { 
    37     int len; 
    38     char s[N]; 
    39     while(~scanf("%s",s)) 
    40     { 
    41         while(!q.empty()) 
    42             q.pop(); 
    43         memset(map,0,sizeof(map)); 
    44         memset(vis,0,sizeof(vis)); 
    45         len=strlen(s); 
    46         map[s[0]-'a'][s[len-1]-'a']=1; 
    47         while(~scanf("%s",s)) 
    48         { 
    49             len=strlen(s); 
    50             if(s[0]=='0') 
    51                 break; 
    52             map[s[0]-'a'][s[len-1]-'a']=1; 
    53         } 
    54         q.push('b'-'a'); 
    55         if(bfs()) 
    56             puts("Yes."); 
    57         else 
    58             puts("No."); 
    59     } 
    60     return 0; 
    61 } 
  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/timeship/p/2619421.html
Copyright © 2011-2022 走看看