八皇后问题,跟着视频编的代码,但是有语法错误,大家帮忙看下哪里错了
本帖最后由 甜玉米 于 2014-12-7 10:12 编辑#include <stdio.h>
int count=0;
int notDanger(int row,int j,(* chess))
{
int i,k;
int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
//判断列方向
for(i=0;i<8;i++)
{
if(*(*(chess+i)+j) != 0)
{
flag1=1;
break;
}
}
//判断左上方
for(i=row,k=j;i>=0 && k>=0;i--,k--)
{
if(*(*(chess+i)+k) != 0)
{
flag2=1;
break;
}
}
//判断右下方
for(i=row,k=j;i<8 && k<8;i++,k++)
{
if(*(*(chess+i)+k) != 0)
{
flag3=1;
break;
}
}
//判断右上方
for(i=row,k=j;i>=0 && k<8;i--,k++)
{
if(*(*(chess+i)+k) != 0)
{
flag4=1;
break;
}
}
//判断左下方
for(i=row,k=j;i<8 && k>=0;i++,k--)
{
if(*(*(chess+i)+k) != 0)
{
flag5=1;
break;
}
}
if(flag1 || flag2 || flag3 || flag4 || flag5)
{
return 0;
}
else
{
return 1;
}
}
//参数row:表示起始行
//参数n:表示列数
//参数(*chess):表示指向棋盘的每一行的指针
void EightQueen(int row,int n,int (*chess))
{
int chess2,i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess2=chess;
}
}
if(8==row)
{
printf("第 %d 种",count+1);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%d ",*(*(chess2+i)+j));
}
printf("\n");
}
printf("\n");
count ++;
}
else
{
for(j=0;j<n;j++)
{
if(notDanger(row,j,chess))//判断是否危险
{
for(i=0;i<8;i++)
{
*(*(chess2+row)+i)=0;
}
*(*(chess2+row)+j)=1;
EightQueen(row+1,n,chess2);
}
}
}
}
int main()
{
int chess,i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess=0;
}
}
EightQueen(0,8,chess);
printf("总共有 %d 种解决方法!\n\n",count);
return 0;
}
错误提示:(就是找不来哪儿错了~笨呐)
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(5) : error C2059: syntax error : '('
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(5) : error C2090: function returns array
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(5) : error C2059: syntax error : ')'
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(6) : error C2143: syntax error : missing ';' before '{'
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(6) : error C2447: missing function header (old-style formal list?)
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(74) : error C2601: 'EightQueen' : local function definitions are illegal
F:\software_class\Data structure\°Ë»êoóÎêìa\Eight_queens.cpp(121) : error C2601: 'main' : local function definitions are illegal 好吧……这么简单的错误居然没人看出来…… 我也是看着敲得,也出错了。求火眼金睛
// EightQueue.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
int count = 0; //全局变量,总共多少种
int notDanger(int row, int j, int (*chess))//判断位置是否危险?
{
int i, flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 0, flag5 = 0;
int k; //表示位置
//判断列方向是否有危险
for(i=0; i<8; i++)
{
if(*(*(chess+i)+j) != 0)
{
flag1 = 1;
break;
}
}
//判断左上方
for( i = row, k = j; i>=0 && k>=0; i--, k--)
{
if(*(*(chess+i)+k) != 0)
{
flag2 = 1;
break;
}
}
//判断右下方
for( i = row, k = j; i<8 && k<8; i++, k++)
{
if(*(*(chess+i)+k) != 0)
{
flag3 = 1;
break;
}
}
//判断右上方
for( i = row, k = j; i>=0 && k<0; i--, k++)
{
if(*(*(chess+i)+k) != 0)
{
flag4 = 1;
break;
}
}
//判断左下方
for( i = row, k = j; i<8 && k>=0; i++, k--)
{
if(*(*(chess+i)+k) != 0)
{
flag5 = 1;
break;
}
}
if(flag1 || flag2 || flag3 || flag4 || flag5)
{
return 0;
}
else{
return 1;
}
}
//参数row:表示起始行
//参数n:标识列数
//参数(*chess):表示指向棋盘每一行的指针
void EightQueen(int row, int n, int (*chess))
{
int chess2;
int i, j;
for( i = 0; i < 8; i++)
for(j = 0; j < 8; j++)
chess2 = chess;
if( 8 == row )
{
printf("第 %d 种:\n", count+1);
for( i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
{
printf("%d ", *(*(chess2+i)+j));
}
printf("\n");
}
printf("\n");
count++;
}
else
{
//判断这个位置是否有危险
//如果没有危险?继续往下
for( j=0; j < n; j++)
{
if(notDanger(row, j, chess)) //判断是否危险
{
for(i=0; i<8; i++)
{
*(*(chess2+row)+i) = 0;//先把整行全部复制为0
}
*(*(chess2+row)+j) = 1;//标出皇后的位置
EightQueen(row+1, n, chess2);
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int chess;
int i, j;
for(i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
{
chess = 0;
}
}
EightQueen(0, 8, chess);
printf("总共有 %d 种解决方法!\n\n", count);
return 0;
}
int notDanger(int row,int j,(* chess))
是不是缺了 int ? ustczzf 发表于 2015-1-3 17:28
我也是看着敲得,也出错了。求火眼金睛
//判断右上方
for( i = row, k = j; i>=0 && k<0; i--, k++)
已调试出来,k<8. ustczzf 发表于 2015-1-3 17:29
int notDanger(int row,int j,(* chess))
是不是缺了 int ?
是的~有时候这种小错误挺误事的~~ #include <stdio.h>
int count=0;
int notDanger(int row,int j,int(* chess))//只需判断该点的所有的上方是否存在危险
{
int i,k;
int flag1=0,flag2=0,flag3=0;
//判断列方向
for(i=0;i<row;i++)
{
if(chess!=0)
{
flag1=1;
break;
}
}
//判断左上方
for(i=row,k=j;i>=0 && k>=0;i--,k--)
{
if(chess!=0)
{
flag2=1;
break;
}
}
for(i=row,k=j;i>=0 && k<8;i--,k++)
{
if(chess!=0)
{
flag3=1;
break;
}
}
if(flag1 || flag2 || flag3 )
{
return 0;
}
else
{
return 1;
}
}
//参数row:表示起始行
//参数n:表示列数
//参数(*chess):表示指向棋盘的每一行的指针
void EightQueen(int row,int n,int (*chess))
{
int chess2,i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess2=chess;
}
}
if(row==8)
{
printf("第 %d 种\n",count+1);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%d ",chess2);
}
printf("\n");
}
printf("\n");
count ++;
}
else
{
for(j=0;j<n;j++)
{
if(notDanger(row,j,chess))//判断是否危险
{
for(i=0;i<8;i++)
{
chess2=0;// *(*(chess2+row)+i)=0;
}
chess2=1;
EightQueen(row+1,n,chess2);
}
}
}
}
void main()
{
int chess,i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess=0;
}
}
EightQueen(0,8,chess);
printf("总共有 %d 种解决方法!\n\n",count);
}
我觉得这样更简单 int notDanger(int row,int j,(* chess))
最后少了一个int 顶一下!!!!挣鱼币学习 顶一下!!!!挣鱼币学习 可以看下 感谢楼主分享 谢谢分享,祝君好运. zh
页:
[1]