[uva-417] Word Index (BFS、队列

来源:互联网 发布:c语言vector迭代器 编辑:程序博客网 时间:2024/06/03 09:56

题意容易知道就是按这样的方式排列83681个数。
然后给每个输进的string输出对应值。
a -> 1
b -> 2
.
.
z -> 26
ab -> 27
ac -> 28
.
.
az -> 51
bc -> 52
.
.
vwxyz -> 83681


但是很难想到队列。
想到队列就很简单
和BFS中关键的操作差不多,每次取出队列最前,然后添加可以加的字母放到队尾,控制string长度,并用map存一下string对应值就可以。


//uva 417 BFS by zhuhua//time limit 3000 ms//AC time 20 ms#include <iostream>#include <map>#include <queue>#include <string>#include <algorithm>using namespace std;map <string,int> Word;int cnt=1;void initial(){    char x;    queue <string> calcu;    for(x='a';x<='z';x++)    {        string m;        m+=x;        Word[m]=cnt++;        calcu.push(m);    }    while(!calcu.empty())    {        string temp=calcu.front();        calcu.pop();        int len=temp.length();        if(len<5)        {            for(x=char(temp[len-1]+1);x<='z';x++)            {                string next=temp+x;                Word[next]=cnt++;                calcu.push(next);            }        }    }}int main(){    string input;    initial();    while(cin>>input)    {        map <string,int>:: iterator it;        it=Word.find(input);        if(it==Word.end())cout<<0<<endl;        else cout<<it->second<<endl;    }    return 0;}