zoukankan      html  css  js  c++  java
  • [HDU] 1181 变形课简单建模后广搜

     题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1181

    方法:以所有咒语看做一条起点为首字母,终点为末字母的有向边来建立有向图。然后在图中判断目标路径是否存在,判断的方法是 :如果目标路径的起点和终点不都在图中出现,则直接得出不存在该路径,否则广搜索来判断目标路径是否存在。

    感想:简单题目,但后期需要频繁重温代码以熟悉广搜代码的写法。该题使用的是邻接矩阵。

    代码:

    View Code
    #include<iostream>
    #include<queue>
    using namespace std;
    bool matrix[26][26];
    bool visited[26];
    bool inGraph[26];
    bool BFSSearch(int x,int y)
    {
        queue<int> q;
        q.push(x);
        visited[x] = true;
        bool re = false;
        while(!q.empty())
        {
            int temp = q.front();
            q.pop();
            if(temp==y)
            {
                re=true;
                break;
            }
            else
            {
                for(int i =0;i<26;i++)
                {
                    if(matrix[temp][i] && !visited[i])
                    {
                        visited[i] = true;
                        q.push(i);
                    }
                }
            }
        }
        return re;
    }
    int main()
    {
        char s[100];
        memset(matrix,false,sizeof(matrix));
        memset(visited,false,sizeof(visited));
        memset(inGraph,false,sizeof(inGraph));
        while(scanf("%s",s)!=EOF)
        {
             
            if( !(strlen(s)==1 && s[0]=='0') )
            {
                int len = strlen(s);
                int st = s[0]-97;
                int ed = s[len-1]-97;
                matrix[st][ed] = true;
                inGraph[st]=inGraph[ed] =true;
            }
            else
            {
                if(!inGraph['b'-97])
                    cout<<"No."<<endl;
                else if(!inGraph['m'-97])
                    cout<<"No."<<endl;
                else if(BFSSearch('b'-97,'m'-97))
                    cout<<"Yes."<<endl;
                else
                    cout<<"No."<<endl;
                memset(matrix,false,sizeof(matrix));
                memset(visited,false,sizeof(visited));
                memset(inGraph,false,sizeof(inGraph));
            }
        }     
        return 0;
    } 
  • 相关阅读:
    C# 数组
    一个遍历算法
    php csv导出
    linux 配置 crontab
    LINUX 配置SVN
    Linux chkconfig命令
    Linux 安装mysql+apache+php
    linux 安装samba
    linux安装软件的学习
    LINUX中简单的字符命令
  • 原文地址:https://www.cnblogs.com/kbyd/p/3018717.html
Copyright © 2011-2022 走看看