鱼C论坛

 找回密码
 立即注册
查看: 3690|回复: 16

八皇后问题,跟着视频编的代码,但是有语法错误,大家帮忙看下哪里错了

[复制链接]
发表于 2014-12-5 21:35:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 甜玉米 于 2014-12-7 10:12 编辑

#include <stdio.h>

int count=0;

int notDanger(int row,int j,(* chess)[8])
{
        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)[8]:表示指向棋盘的每一行的指针
void EightQueen(int row,int n,int (*chess)[8])
{
        
        int chess2[8][8],i,j;

        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        chess2[j]=chess[j];
                }
        }

        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[8][8],i,j;
        
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        chess[j]=0;
                }
        }

        EightQueen(0,8,chess);

        printf("总共有 %d 种解决方法!\n\n",count);

        return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-12-5 21:36:14 | 显示全部楼层
错误提示:(就是找不来哪儿错了~笨呐)
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(5) : error C2059: syntax error : '('
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(5) : error C2090: function returns array
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(5) : error C2059: syntax error : ')'
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(6) : error C2143: syntax error : missing ';' before '{'
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(6) : error C2447: missing function header (old-style formal list?)
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(74) : error C2601: 'EightQueen' : local function definitions are illegal
F:\software_class\Data structure\°&#203;&#187;êoó&#206;êìa\Eight_queens.cpp(121) : error C2601: 'main' : local function definitions are illegal
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-7 10:11:01 | 显示全部楼层
好吧……这么简单的错误居然没人看出来……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-3 17:28:27 | 显示全部楼层
我也是看着敲得,也出错了。求火眼金睛



// EightQueue.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdio.h>

int count = 0; //全局变量,总共多少种

int notDanger(int row, int j, int (*chess)[8])  //判断位置是否危险?
{
    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)[8]:表示指向棋盘每一行的指针
void EightQueen(int row, int n, int (*chess)[8])
{
    int chess2[8][8];
    int i, j;

    for( i = 0; i < 8; i++)
        for(j = 0; j < 8; j++)
            chess2[i][j] = chess[i][j];

    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[8][8];
    int i, j;


    for(i = 0; i < 8; i++)
    {
        for(j = 0; j < 8; j++)
        {
            chess[i][j] = 0;
        }
    }

    EightQueen(0, 8, chess);
    printf("总共有 %d 种解决方法!\n\n", count);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-3 17:29:27 | 显示全部楼层
int notDanger(int row,int j,(* chess)[8])

是不是缺了 int ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-3 17:31:27 | 显示全部楼层
ustczzf 发表于 2015-1-3 17:28
我也是看着敲得,也出错了。求火眼金睛

//判断右上方
    for( i = row, k = j; i>=0 && k<0; i--, k++)
已调试出来,k<8.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-4 11:35:34 | 显示全部楼层
ustczzf 发表于 2015-1-3 17:29
int notDanger(int row,int j,(* chess)[8])

是不是缺了 int ?

是的~有时候这种小错误挺误事的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-2 17:57:59 | 显示全部楼层
#include <stdio.h>
int count=0;
int notDanger(int row,int j,int(* chess)[8])//只需判断该点的所有的上方是否存在危险
{
        int i,k;
        int flag1=0,flag2=0,flag3=0;

        //判断列方向
        for(i=0;i<row;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>=0 && k<8;i--,k++)
        {
                if(chess[i][k]!=0)
                {
                        flag3=1;
                        break;
                }
        }
        if(flag1 || flag2 || flag3 )
        {
                return 0;
        }
        else
        {
                return 1;
        }
}

//参数row:表示起始行
//参数n:表示列数
//参数(*chess)[8]:表示指向棋盘的每一行的指针
void EightQueen(int row,int n,int (*chess)[8])
{
        
        int chess2[8][8],i,j;

        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        chess2[i][j]=chess[i][j];
                }
        }
        if(row==8)
        {
                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;// *(*(chess2+row)+i)=0;
                                }
                                chess2[row][j]=1;
                                EightQueen(row+1,n,chess2);
                        }
                }

        }
}
void main()
{
        int chess[8][8],i,j;
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        chess[i][j]=0;
                }
        }
        EightQueen(0,8,chess);
        printf("总共有 %d 种解决方法!\n\n",count);
}
我觉得这样更简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-20 14:16:29 | 显示全部楼层
int notDanger(int row,int j,(* chess)[8])
最后少了一个int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-21 00:19:08 | 显示全部楼层
顶一下!!!!挣鱼币学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-21 00:22:15 | 显示全部楼层
顶一下!!!!挣鱼币学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-27 20:48:43 | 显示全部楼层
可以看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-4-28 02:23:39 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-28 18:27:12 From FishC Mobile | 显示全部楼层
感谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-4-28 18:28:07 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-28 21:25:10 From FishC Mobile | 显示全部楼层
谢谢分享,祝君好运.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-15 00:16:06 From FishC Mobile | 显示全部楼层
zh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 04:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表