我試圖解決8個難題使用堆棧。此代碼僅用於瞭解 程序是否可以做到 。 該程序迭代第一個字符串,並執行該作業,但在推送了2個新字符串之後。它只是彈出它們,但不會繼續執行這些功能。有沒有人知道爲什麼我的程序停止推入堆棧
任何人都有一個想法我該怎麼辦?
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cstdlib>
#include "stack.cpp"
using namespace std;
bool checkFound(string meta,string aVer);
string converArretoString(STACK <string> stack, string ac);
void crearPosibilidad(STACK <string> open,string ac);
void checkRow(STACK <string> stack, int actual[3][3],int row,int col);
void checkCol(STACK <string> stack, int actual[3][3],int row,int col);
int main(int argc, char** argv)
{
string meta="";
string actual="120345678";
STACK <string> state;
STACK <string> ustate;
STACK <string> steps;
state.push(actual);
while (!state.empty())
{
actual.clear();
actual=state.pop();
// cout<<actual<<endl;
if(checkFound(meta,actual))
{
cout<<actual;
cout<< "lo encontramos";
return 0;
}
//cout<<actual<<endl;
ustate.push(actual);
crearPosibilidad(state,actual);
}
return 0;
}
//checa si se encontro la solucion
bool checkFound(string meta,string aVer)
{
if(aVer==meta)
{
return true;
}
return false;
}
//creara los posibles escenarios
void crearPosibilidad(STACK <string> state,string ac)
{
int act [3][3];
int i=-1;
int col=0;
int ren=0;
string a;
for (int r = 0; r<3; r++)
{
for(int c=0;c<3;c++)
{
i++;
a=ac[i];
act[r][c]=stoi(a);
if (act[r][c]==0)
{
cout<<r<<endl;
cout<<c<<endl;
ren=r;
col=c;
}
}
}
checkCol(state,act,ren,col);
checkRow(state,act,ren,col);
}
string converArretoString(int actual[3][3])
{
string temp;
ostringstream conver;
for(int r=0;r<3;r++)
{
for(int c=0;c<3;c++)
{
conver<<actual[r][c];
}
}
temp=conver.str();
cout<<temp<<endl;
return temp;
}
void checkRow(STACK <string> stack, int actual[3][3],int row,int col)
{
int temp;
string tems;
if(row==0)
{
//mover abajo
temp=actual[row+1][col];
actual[row][col]=temp;
actual[row+1][col]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
// cout<<tems<<endl;
stack.push(tems);
}
//original
temp=actual[row][col];
actual[row+1][col]=temp;
actual[row][col]=0;
}
if(row==1)
{ //moverabajo
temp=actual[row+1][col];
actual[row][col]=temp;
actual[row][col]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
// cout<<tems<<endl;
stack.push(tems);
}
//mover arriba
temp=actual[row][col];
actual[row][col]=actual[row-1][col];
actual[row+1][col]=temp;
actual[row-1][col]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
// cout<<tems<<endl;
stack.push(tems);
}
//original
temp=actual[row][col];
actual[row-1][col]=temp;
actual[row][col]=0;
}
if(row==2)
{
//mover arriba
temp=actual[row-1][col];
actual[row][col]=temp;
actual[row-1][col]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
// cout<<tems<<endl;
stack.push(tems);
}
//original
temp=actual[row][col];
actual[row-1][col]=temp;
actual[row][col]=0;
}
}
void checkCol(STACK<string> stack, int actual[3][3],int row, int col)
{
int temp;
string tems;
if(col==0)
{
//mover derecha
temp=actual[row][col+1];
actual[row][col]=temp;
actual[row][col+1]=0;
//put the generated child on the queue
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
//cout<<tems<<endl;
stack.push(tems);
}
//return to the orginal
temp=actual[row][col];
actual[row][col+1]=temp;
actual[row][col]=0;
}//if
if(col==1)
{
//move right
temp=actual[row][col+1];
actual[row][col]=temp;
actual[row][col+1]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
//cout<<tems<<endl;
stack.push(tems);
}
//mover izquierda
temp=actual[row][col];
actual[row][col]=actual[row][col-1];
actual[row][col+1]=temp;
actual[row][col-1]=0;
tems=converArretoString(actual);
//cout<<tems<<endl;
if(!stack.search(tems))
{
//cout<<tems<<endl;
stack.push(tems);
}
//orginal
temp=actual[row][col];
actual[row-1][col]=temp;
actual[row][col]=0;
}
if(col==2)
{
//mover izquierda
temp=actual[row][col-1];
actual[row][col]=temp;
actual[row][col-1]=0;
tems=converArretoString(actual);
// cout<<tems<<endl;
if(!stack.search(tems))
{
//cout<<tems<<endl;
stack.push(tems);
}
//orginal
temp=actual[row][col];
actual[row][col-1]=temp;
actual[row][col]=0;
}
}
不知道您正在使用的'STACK'功能的實施情況,無法分辨它的行爲。然而,假設'stack.push()'已知可以工作,那麼我建議考慮在什麼情況下'!stack.search(tems)'是錯誤的,以及如果你的'if(row)'和'if col)'類型檢查正在發生,因爲你也想要它們。 – Jameson
嘗試調試您的程序 –