小弟程序有点问题,大概是二维数组的引用问题未解决,求教

LucasGram 2017-10-17 09:48:00
#include<iostream>
using namespace std;
//分块处理
//先写输出函数
void output(int a[][8]);
//输出函数后面应该是确定皇后位置函数
void check_board(int board[][8]);
void turn(int b[][8]);
void put(int b[][8]);
void main()
{
int board[8][8];
check_board(board);
put(board);
output(board);
}
void output(int a[][8])
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(a[i][j]==1)
cout<<"Q";
else
cout<<"+";
}
cout<<endl;
}
}
void check_board(int board[][8])
{
for(int i=0;i<8;i++)
for(int j=0;i<8;j++)
board[i][j]=0;
}
void turn(int b[][8])//turn函数将某指定元素(1)在棋盘上的同行同列以及左右斜对角线上的元素全部由0转化为2
{
for(int i=0;i<8;i++)
{
for(int j=0;i<8;j++)
{
if(b[i][j]==1)
{
for(int k=0;k<8&&k!=i;k++)//同列的元素全部化为2
{
b[k][j]=2;
}
for(int k=0;k<8&&k!=j;k++)//同行的元素全部化为2
{
b[i][k]=2;
}
//对角线转化
for(int k=0;k<8;k++)
{
if(k>=0&&k<8&&(i+j-k)>=0&&(i+j-k)<8)
b[k][i+j-k]=2;
}
for(int k=0;k<8;k++)
{
if(k>=0&&k<8&&(k+j-i)>=0&&(k+j-i)<8)
b[k][k+j-i]=2;
}
}
}
}
}
void put(int b[][8])
{
//main函数进行将每行的元素遍历再放置皇后
bool C=1;
for(int k=0;k<8;k++)
{
for(int q=0;q<8&&C;q++)
{
if(b[k][q]==0)
{
b[k][q]=1;
C=0;
turn(b);
}
}
}
}
...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-10-20
  • 打赏
  • 举报
回复
引用 4 楼 LucasGram 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] check_board函数和turn函数都需要改一下,
for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++) /*这儿的i < 8要改成j < 8*/
void put(int b[][8])
{
    //main函数进行将每行的元素遍历再放置皇后
    bool C=1;
    for(int k=0;k<8;k++)
    {
        for(int q=0;q<8&&C;q++)
        {
            if(b[k][q]==0)
            {
                b[k][q]=1;
                C=0;   /*此处C改为0,那么循环只会执行一次,即k = 0, q = 0时。*/
                turn(b);
            }
        }
    }
}
好像还是有点问题[/quote] 恩,已经注释到了,你的逻辑里只会执行一次turn函数,下面的问题,要根据你的实现逻辑去改了。
paschen 版主 2017-10-20
  • 打赏
  • 举报
回复

[code=c]#include<iostream>
using namespace std;
//分块处理
//先写输出函数
void output(int a[][8]);
//输出函数后面应该是确定皇后位置函数
void check_board(int board[][8]);
void turn(int b[][8]);
void put(int b[][8]);
void main()
{
int board[8][8];
check_board(board);
put(board);
output(board);
}
void output(int a[][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (a[i][j] == 1)
cout << "Q";
else
cout << "+";
}
cout << endl;
}
}
void check_board(int board[][8])
{
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
board[i][j] = 0;
}
void turn(int b[][8])//turn函数将某指定元素(1)在棋盘上的同行同列以及左右斜对角线上的元素全部由0转化为2
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (b[i][j] == 1)
{
for (int k = 0; k < 8 && k != i; k++)//同列的元素全部化为2
{
b[k][j] = 2;
}
for (int k = 0; k < 8 && k != j; k++)//同行的元素全部化为2
{
b[i][k] = 2;
}
//对角线转化
for (int k = 0; k < 8; k++)
{
if (k >= 0 && k < 8 && (i + j - k) >= 0 && (i + j - k) < 8)
b[k][i + j - k] = 2;
}
for (int k = 0; k < 8; k++)
{
if (k >= 0 && k < 8 && (k + j - i) >= 0 && (k + j - i) < 8)
b[k][k + j - i] = 2;
}
}
}
}
}
void put(int b[][8])
{
//main函数进行将每行的元素遍历再放置皇后
bool C = 1;
for (int k = 0; k < 8; k++)
{
for (int q = 0; q < 8 && C; q++)
{
if (b[k][q] == 0)
{
b[k][q] = 1;
C = 0;
turn(b);
}
}
}
}

LucasGram 2017-10-19
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
check_board函数和turn函数都需要改一下,
for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++) /*这儿的i < 8要改成j < 8*/
void put(int b[][8])
{
    //main函数进行将每行的元素遍历再放置皇后
    bool C=1;
    for(int k=0;k<8;k++)
    {
        for(int q=0;q<8&&C;q++)
        {
            if(b[k][q]==0)
            {
                b[k][q]=1;
                C=0;   /*此处C改为0,那么循环只会执行一次,即k = 0, q = 0时。*/
                turn(b);
            }
        }
    }
}
好像还是有点问题
LucasGram 2017-10-19
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
for (int j = 0; i < 8; j++) 应该改成:for (int j = 0; j < 8; j++) 吧
改了以后程序还是运行失败了
自信男孩 2017-10-19
  • 打赏
  • 举报
回复
check_board函数和turn函数都需要改一下,
for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++) /*这儿的i < 8要改成j < 8*/
void put(int b[][8])
{
    //main函数进行将每行的元素遍历再放置皇后
    bool C=1;
    for(int k=0;k<8;k++)
    {
        for(int q=0;q<8&&C;q++)
        {
            if(b[k][q]==0)
            {
                b[k][q]=1;
                C=0;   /*此处C改为0,那么循环只会执行一次,即k = 0, q = 0时。*/
                turn(b);
            }
        }
    }
}
paschen 版主 2017-10-18
  • 打赏
  • 举报
回复
for (int j = 0; i < 8; j++) 应该改成:for (int j = 0; j < 8; j++) 吧

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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