|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是一个解决八皇后问题的代码,里面有一个return我看不懂,不知道那个return原理是什么,先上代码吧
- #include<stdio.h>
- #include<stdlib.h>
- int queens[8] = {0}, count = 0;
- int check(int line, int list)
- {
- for(int i = 0; i < line; i++)
- {
- if(queens[i] == list)
- {
- return 0;
- }
- if((line + list) == (i + queens[i]))
- {
- return 0;
- }
- if((line - list) == (i - queens[i]))
- {
- return 0;
- }
- }
- return 1;
- }
- void PrintEightQueen()
- {
- for (int line = 0; line < 8; line++)
- {
- int list;
- for (list = 0; list < queens[line]; list++)
- printf("0");
- printf("1");
- for (list = queens[line] + 1; list < 8; list++){
- printf("0");
- }
- printf("\n");
- }
- printf("================\n");
- }
- void EightQueenSurvive(int line)
- {
- for(int list = 0; list < 8; list++)
- {
- if(check(line, list))
- {
- queens[line] = list;
- if(line == 7)
- {
- count++;
- PrintEightQueen();
- queens[line] = 0;
- return;
- }
- EightQueenSurvive(line + 1);
- queens[line] = 0;
- }
- }
- }
- int main()
- {
- EightQueenSurvive(0);
- printf("it has %d methods",count);
- system("pause");
- return 0;
- }
复制代码
if(line == 7)
{
count++;
PrintEightQueen();
queens[line] = 0;
return;
}
这里面这个return是干嘛的,如果去掉的话count的输出值就是1,加上return的话count的值是92,也就是正确的答案,为什么去掉return后count的值只加了一次1呢?
EightQueenSurvive 这个函数是一个递归函数
if(line == 7)
{
count++;
PrintEightQueen();
queens[line] = 0;
return;
}
里面的return就是递归在line == 7的时候退出递归
count是个全局函数 如果没有return 应该是一个死循环吧
|
|