POJ百练|4128:单词序列 BFS

是一道经典的BFS题,每次压入队列的都是与当前队首相差一个字符的字符串,最早到达的就是最短的距离。

#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

struct status{
     string s;
     int step;
     status(string s, int step):s(s), step(step){}
};
bool visit[30];

// 判断两个字符串之间的距离是否为1
bool Judge(string s1, string s2){
     if(s1.length() != s2.length())
          return false;
     int ne = 0;
     for(int i = 0; i < s1.length(); i++){
          if(s1[i] != s2[i])
               ne++;
     }
     return (ne==1);  // 看两个字符串是否只差一个字符
}

int main(){
     string start, target;
     cin>>start>>target;
     vector<string> dict;
     string temp;
     queue<status> q;
     memset(visit,0,sizeof(visit));
     for(int i = 0; i < 5; i++){
          cin>>temp;
          dict.push_back(temp);
     }
//     while(cin>>temp){
//          dict.push_back(temp);
//     }
     q.push(status(start, 2));
     while(!q.empty()){
          status cur = q.front();
          q.pop();
          if(Judge(cur.s, target)){
               cout<<cur.step<<endl;
               return 0;
          }
          // 搜索整个字典中与当前字符串距离为1的字符串
          for(int i = 0; i < dict.size(); i++){
               if(!visit[i] && Judge(cur.s, dict[i])){
                    visit[i] = true;
                    q.push(status(dict[i], cur.step+1));
               }
          }
     }
     // 没有找到
     cout<<0<<endl;
     return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容