大佬们请问我这代码哪写错了:(
查看原帖
大佬们请问我这代码哪写错了:(
1267810
hahahahaen楼主2024/4/8 20:55
#include <iostream>
using namespace std;
int ans = 0; int m;
int a[13][13];//a==14表示皇后,0表示可以放,14-n表示此处不能放且来自哪一行 

void dfs(int n)
{
	if (n==0)
	{
		ans++;
		if (ans == 1 || ans == 2 || ans == 3)
		{

			for (int i = 13 - m; i < 13; i++)
			{
				for (int j = 0; j < 13; j++)
				{
					if (a[i][j] == 14)
					{
						cout << j + 1 << ' ';
						break;
					}
				}
			}
			cout << endl;
		}//n=0即还有0个皇后要放时,输出前三种可能 
		
	}
	else
	{
		for (int i = 0; i < n; i++)
		{
			if (a[13 - n][i] == 0)//13-n表示行,从13-m到13 
			{
				a[13 - n][i] = 14;
				for (int j = 1; j < n; j++)
				{
					if (a[13 - n + j][i] == 0) {
						a[13 - n + j][i] = 14 - n;
					}
					if (i + j < n&&a[13 - n + j][i + j] == 0 ) {
						a[13 - n + j][i + j] = 14 - n;
					}
					if (i - j >= 0 && a[13 - n + j][i - j] == 0)
					{
						a[13 - n + j][i - j] = 14 - n;
					}
				}//如果该在、格前没有被标记,则标记 
				dfs(n - 1);
				a[13 - n][i] = 0;
				for (int j = 1; j < n; j++)
				{
					if (a[13 - n + j][i] == 14 - n) {
						a[13 - n + j][i] = 0;
					}
					if (i + j < n && a[13 - n + j][i + j] == 14 - n) {
						a[13 - n + j][i + j] = 0;
					}
					if (i - j >= 0 && a[13 - n + j][i - j] == 14 - n)
					{
						a[13 - n + j][i - j] = 0;
					}
				}//回溯,只回溯由该行标记的、格 以及皇后格 

			}

		}
	}
}
int main() {

	cin >> m;
	memset(a, 0, sizeof(a));
	dfs(m);
	cout << ans;
	return 0;
}

为啥他输出的一直是0啊啊啊啊啊!蒟蒻哭泣:(

2024/4/8 20:55
加载中...