gpt4 book ai didi

c++ - boogle 中的段错误

转载 作者:行者123 更新时间:2023-11-28 00:39:21 24 4
gpt4 key购买 nike

我正在尝试用蛮力方法解决 boogle 问题。输入是:

网格矩阵,表示为字符串,例如:'pesa'单词,也表示为字符串“asa”。

我正在编写一个函数来检查该词是否是矩阵中的合法词。

bool Boogle::contains(std::string grid, std::string word) const
{
bool* isvisited=new bool[grid.length()];
for (unsigned int i=0; i<grid.length(); i++)
{
*(isvisited+i)=false;
}

for (unsigned int i=0; i<grid.length(); i++)
{
// Recursive approach
if (grid[i]==word[0])
if (checkqueue(grid, word, isvisited, i, 0))
return true;
}
return false;
}

bool Boogle::checkqueue(const string &grid, const string &word, bool* const &isvisited, unsigned int grid_index, unsigned int count) const
{
int matsize=int(sqrt(grid.length()));
cout<<"\nCurrently at the index "<<grid_index<<"\n";
isvisited[grid_index]=true;
for (unsigned int i=0; i<grid.length(); i++)
{
cout <<isvisited[i]<<" ";
}
cout<<"\n";

if (count==word.length()-1)
{
cout << " reach the end of word\n";
return true;
}
else
{
count ++;
cout << "Recursive call on WORD: "<<word<<" " <<count<<" "<<word[count]<<"\n";

// non diagonal
if ((grid_index<grid.length()) && (isvisited[grid_index+1]==false) && (grid[grid_index+1]==word[count]))
return checkqueue(grid, word, isvisited, grid_index+1, count);

else if ((grid_index>0)&& (isvisited[grid_index-1]==false) && (grid[grid_index-1]==word[count]))
return checkqueue(grid, word, isvisited, grid_index-1, count);

else if (((grid_index+matsize)<grid.length())&& (isvisited[grid_index+matsize]==false) && (grid[grid_index+matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index+1, count);

else if (((grid_index-matsize)<grid.length())&& (isvisited[grid_index-matsize]==false) && (grid[grid_index-matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index+1, count);

// diagonal
else if ((grid_index-1-matsize>0)&& (isvisited[grid_index-1-matsize]==false) && (grid[grid_index-1-matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index-1-matsize, count);

else if ((grid_index+1-matsize>0) && (isvisited[grid_index+1-matsize]==false) && (grid[grid_index+1-matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index+1-matsize, count);

else if ((grid_index+1+matsize<grid.length())&& (isvisited[grid_index+1+matsize]==false) && (grid[grid_index+1+matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index+1+matsize, count);

else if ((grid_index-1+matsize<grid.length())&& (isvisited[grid_index-1+matsize]==false) && (grid[grid_index-1+matsize]==word[count]))
return checkqueue(grid, word, isvisited, grid_index-1+matsize, count);
else
{
// cout<<"No possible neighbor\n";
return false;
}

}
}

如果我运行 boogle.contains("pesa","as"),效果会很好。但如果这是一个非法词,例如“asa”,它会返回段错误。这是从哪里来的?

./Boogle.exe 
.
Currently at the index 3
0 0 0 1
Recursive call on WORD: asa 1 s

Currently at the index 2
0 0 1 1
Recursive call on WORD: asa 2 a
Segmentation fault: 11

P/S:当单词有效时,这是正确的运行 (boogle.contains("pesa","esp"))

Currently at the index 1
0 1 0 0
Recursive call on WORD: esp 1 s

Currently at the index 2
0 1 1 0
Recursive call on WORD: esp 2 p

Currently at the index 3
0 1 1 1
reach the end of word



OK (1 tests)

最佳答案

您正在混合使用有符号和无符号算术。 matsizeintgrid_indexunsigned int。您与 >0 的比较不起作用,因为结果总是无符号的,因此永远不会为负数。

顺便说一句,在修复有符号/无符号不匹配后,您可能需要 >=0

关于c++ - boogle 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com