字梯遊戲(C++)
編寫一個程式實現字梯遊戲。其中,單字母替換的值為1,而單字母的刪除或新增的值p>0(p值由使用者指定)。
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cmath>
using namespace std;
const int INFINTY = 99999;
struct Vertex
{
vector<int> adj;
vector<int> weight;
bool known;
int dist;
string name;
int path;
};
void printPath(int vIndex,vector<Vertex> V)
{
if(vIndex>=0&&V[vIndex].path>-1)
{
printPath(V[vIndex].path,V);
cout<<" to ";
}
cout<<V[vIndex].name;
}
void dijkstra(int sIndex,int tIndex,vector<Vertex> & Vertices)
{
int smallestDist;
int smallestVertex;
Vertex v,s,t;
int n=Vertices.size();
Vertices[sIndex].dist=0;
for(;;)
{
smallestDist= INFINITY;
smallestVertex=-1;
for(int i=0;i<n;i++)
{
if(!Verties[i].known&&Vertices[i].dist<smallestDist)
{
smallestDist=Vertices[i].dist;
smallestVertex=1;
}
}
if(smallestVertex<0||smallestVertex==tIndex)
break;
Vertices[smallestVertex].known=true;
v=Vertices[smallestVertex];
for(int j=0;j<v.adj.size();j++)
{
if(!(Vertices[v.adj[j].known))
{
if(v.dist+v.weight[j]<Vertices[v.adj[j].dist)
{
Vertices[v.adj[j]].dist=v.dist+v.weight;
Vertices[v.adj[j]].path=smallestVertex;
}
}
}
}
}
vertor<Vertex> readWords(istream & in)
{
string oneLine;
vector<Vertex> v;
Vertex w;
while(in>>oneLine)
{
w.name=oneLine;
w.known=false;
w.path=-1;
w.dist=INFINITY;
v.push_back(w);
}
return v;
}
int oneCharOff(const string & word1,const string & word2,int p)
{
string big,small,shrink;
int cost;
if(abs((int)(word.length()-word2.length()))>1)
return 0;
else if(word1.length()==word2.length())
{
int diffs=0;
for(int i=0;i<word1.length();i++)
if(word1[i]!=word2[i])
if(++diffs>1)
return 0;
if(diffs==1)
return 1;
}
if(word2.length()>word1.length())
{
big=word2;
small=word1;
}
else
{
big=word1;
small=word2;
}
for(int i=0;i<big.length()-1;i++)
{
shrink=big.substr(0,1)+big.substr(i+1,big,size()-i-1);
if(shrink==small)
return p;
}
if(big.substr(0,big.size()-1)==small)
return p;
else
return 0;
}
void fillAdjacencies(vector<Vertex> & words,int p)
{
int cost;
for(int i=0;i<words.size();i++)
{
for(int j=i+1;j<words.size();j++)
{
cost=oneCharOff(words[i].name,words[j].name,p);
if(cost>0)
{
words[i].adj.push_back(j);
words[i].weight.push_back(cost);
words[j].adj.push_back(i);
words[j].weight.push_back(cost);
}
}
}
}
int main()
{
int p;
ifstream fin("dict.txt");
string w1,w2;
int w1Index,w2Index;
cout<<"What is the cost of single char deletions: ";
cin>>p;
Vector<Vertex> words=readWords(fin);
do
{
cout<<"Enter two words in the dictionary: ";
cin>>w1>>w2;
for(w1Index=0;w1Index<words.size()&&words[w1Index].name!=w1;w1Index++)
}while(w1Index>=words.size()||w2Index>=words.size());
fillAdjacencies(words,p);
dijkstra(w1Index,w2Index,words);
cout<<endl;
printPath(w2Index,words);
return 0;
}
感謝您的訪問,希望對您有所幫助。
歡迎大家關注或收藏、評論或點贊。
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- C++遞迴演算法之爬樓梯C++遞迴演算法
- 步梯
- C++ 很有趣:編寫一個井字遊戲 (Tic Tac Toe)C++遊戲
- 由一個C++版本猜數字遊戲引起的效率問題C++遊戲
- 在 2D 橫向卷軸遊戲裡上下樓梯遊戲
- 【讀書】領導梯隊-領導梯隊模型模型
- C++關鍵字explicitC++
- C++關鍵字decltypeC++
- 用5個億狠砸電梯廣告,貪玩遊戲在想什麼?遊戲
- 數字遊戲遊戲
- 猜字遊戲遊戲
- 【轉】C++ static關鍵字C++
- C++中static關鍵字C++
- C++中的魔鬼數字C++
- 猜數字遊戲遊戲
- c++簡易小遊戲C++遊戲
- c/c++ const關鍵字C++
- 【C++】requires關鍵字簡介C++UI
- 開心檔之C++ 數字C++
- C++中重要關鍵字總C++
- C++ explicit&noexcept關鍵字C++
- C++/C:數字轉成字串, 字串轉成數字C++字串
- 用C++語言寫遊戲——打怪小遊戲C++遊戲
- 電梯引發的思考
- 上樓梯演算法演算法
- 電梯會議+原型展示原型
- Shell猜數字遊戲遊戲
- 猜數字小遊戲遊戲
- 【Java】——猜數字遊戲Java遊戲
- 谷歌子公司推出新款機器人,可以爬樓梯擦樓梯谷歌機器人
- C++中的 const 關鍵字C++
- C++ typeid關鍵字詳解C++
- C++ 62個關鍵字的作用C++
- C++中的10個關鍵字C++
- C++中的typeid關鍵字C++
- 如何編寫 C++ 遊戲引擎C++遊戲引擎
- 首個5G電梯安全平臺落地,電梯場景走向智慧化
- 百度天工攜手康力電梯打造電梯物聯網智慧時代