• [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;
    } 
  • 相关阅读:
    获取exe和dll里面的资源
    [C++] 反编译器
    再一次利用with as 优化SQL
    编码指南:寻找科学中的艺术
    对手机支付安全机制的思考
    用adblock过滤页面上固定位置的悬浮窗
    git卡在Resolving deltas 100%的解决办法
    十字路口的程序员
    hdu 2555
    hdu 1864
  • 原文地址:https://www.cnblogs.com/kbyd/p/3018717.html
Copyright © 2020-2023  润新知