不是所有的控件路径都返回值???

zhou3724042 2008-07-09 11:28:09
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>

using namespace std;
void printSudoku(int[][9]);
bool isLegal(int,int,int[][9],int);
bool solve(int,int,int[][9]);
void stringAnalyze(string[],int[][9]);

int main(){
string orders[30] = {"018","034","052","076","113",
"124","169","171","209","216",
"278","284","332","341","356",
"533","545","557","608","614",
"677","685","712","726","761",
"773","819","837","851","874"};
int sudoku[9][9] = {{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}
};
stringAnalyze(orders,sudoku);
printSudoku(sudoku);
// for(int i = 0;i < 9;i++){
// for(int j = 0;j < 9;j++){
// solve(j,i,sudoku);
// }
// }
solve(0,0,sudoku);
cout << "\n";
printSudoku(sudoku);
return 0;
}

void stringAnalyze(string orders[],int sudoku[][9]){
for(int count = 0;count < 30;count++){
const char* point = orders[count].c_str();
int tmp = atoi(point);
int i = tmp / 100;
int j = tmp / 10 - i * 10;
int value = tmp % 10;
sudoku[i][j] = value;
}
}

void printSudoku(int sudoku[][9]){
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
cout << sudoku[i][j] << " ";
}
cout << "\n";
}
}

bool isLegal(int i,int j,int sudoku[][9],int value){
for(int count = 0;count < 9;count++){
if(count != i && sudoku[count][j] == value){
return false;
}
}
for(int count = 0;count < 9;count++){
if(count != j && sudoku[i][count] == value){
return false;
}
}
int m = i / 3;
int n = j / 3;
for(int i = m * 3;i < 3 + m * 3;i++){
for(int j = n * 3;j < 3 + n * 3;j++){
if(sudoku[i][j] == value){
return false;
}
}
}
return true;
}

bool solve(int i,int j,int sudoku[][9]){
// if(sudoku[i][j] != 0){
// return;
// }else{
// for(int count = 1;count <= 9;count++){
// if(isLegal(i,j,sudoku,count)){
// sudoku[i][j] = count;
// return;
// }
// }
// }
if (i == 9) {
i = 0;
if (++j == 9)
return true;
}
if (sudoku[i][j] != 0)
return solve(i+1,j,sudoku);
for (int val = 1; val <= 9; val++) {
if (isLegal(i,j,sudoku,val)) {
sudoku[i][j] = val;
if (solve(i+1,j,sudoku))
return true;
}
}

}

1>Sudoku.cpp
1>f:\projects\pd\pd\sudoku.cpp(111) : warning C4715: “solve”: 不是所有的控件路径都返回值
1>正在链接...
1>LINK : 没有找到 F:\Projects\PD\Debug\PD.exe 或上一个增量链接没有生成它;正在执行完全链接
1>正在嵌入清单...
1>生成日志保存在“file://f:\Projects\PD\PD\Debug\BuildLog.htm”
1>PD - 0 个错误,1 个警告

用的是VS2008,不清楚是什么问题。。。求高手解答下
...全文
1742 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwer_boo 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lionc650 的回复:]
应该指的是函数中有些分支语句没有加return;
[/Quote]正解
lionc650 2008-07-09
  • 打赏
  • 举报
回复
应该指的是函数中有些分支语句没有加return;
lzr001 2008-07-09
  • 打赏
  • 举报
回复
存在路径没有返回,会由告警的!
在函数末尾默认加一个return false;

bool solve(int i,int j,int sudoku[][9]){
// if(sudoku[i][j] != 0){
// return;
// }else{
// for(int count = 1;count <= 9;count++){
// if(isLegal(i,j,sudoku,count)){
// sudoku[i][j] = count;
// return;
// }
// }
// }
if (i == 9) {
i = 0;
if (++j == 9)
return true;
}
if (sudoku[i][j] != 0)
return solve(i+1,j,sudoku);
for (int val = 1; val <= 9; val++) {
if (isLegal(i,j,sudoku,val)) {
sudoku[i][j] = val;
if (solve(i+1,j,sudoku))
return true;
}
}
return false;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧