⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp1.cpp

📁 c实现n皇后m棋盘, c实现n皇后m棋盘, c实现n皇后m棋盘,
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int *x; 
int n,m,sum=0;
int  Place(int);
void QueenGet(void);
void TraceBack(int);
void PrintMethod(void);

void main(void)
{
    printf("Input Queen n: ");
    scanf("%d",&n);
	printf("Input chessboard m: ");
    scanf("%d",&m);
    x=(int *)malloc(sizeof(int)*m);
	printf("\"Q\" means Queen position. \n\"*\" means no chessman.");
    QueenGet();
	getchar();
	getchar();

}

int Place(int r)//检测第r行放的位置是否可行
{
    int i;
    for(i=0;i<r;i++){
		int tempxr=x[r],tempxi=x[i],tempri=r-i,tempx=x[r]-x[i];
        if(x[r]==x[i] || abs(r-i)==abs(x[r]-x[i]))
		{
			int tempxr=x[r],tempxi=x[i],tempri=r-i,tempx=x[r]-x[i];
            return 0;
		}
    }
	int tempxr=x[r],tempxi=x[i],tempri=r-i,tempx=x[r]-x[i];
    return 1;
		
}

void TraceBack(int r,int ex, int queen)//安置第r行的棋子
{
    int i,j,ex_c=ex;
    if(r>=n && queen==n) //如果r等于n则表示n个皇后都布置好
	{
        sum++;
        PrintMethod();//输出n个皇后
    }else
	{
		for(j=0;j<=ex_c;j++)
		{
			ex=ex-j;
			for(i=0;i<m;i++)//从第r行开始
			{
				x[r]=i;//第r行位置为i
				//如果可以放,那么就进行下一行,不可行就让第r行向后挪1位
				

				if(Place(r)) 
				{
					TraceBack(r+1,ex,queen+1);
				}
			}
			x[r]=100;
			r=r+1;
			int temp=j;
		}
	}
}

void PrintMethod(void)
{
    int i,j;
    printf("\nmethod %d\n",sum);
    for(i=0;i<m;i++){
        for(j=0;j<m;j++){
			if(j==x[i]) printf("Q ");
			else printf("* ");
        }
		printf("\n");
    }
}

void QueenGet(void)
{
	int queen=0,ex=m-n;
		TraceBack(0,ex,queen);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -