其他分享
首页 > 其他分享> > 排列问题

排列问题

作者:互联网

code

#include<iostream>
using namespace std;
int a[11][11], b[11], bj[11] = {0}, n, k, sum = 0;
int f(int s) {
	int i1;
	if (s == n) {
		sum++;
		if (sum == k) {
			for (i1 = 0; i1 < n; i1++) {
				cout << b[i1] << ' ';
			}
			cout << '\n';
			return 0;
		}
	} else {
		for (i1 = 0; i1 < n; i1++) {
			if (bj[i1] == 0 && a[b[s - 1]][i1] == 1 || s == 0) {
				b[s] = i1, bj[i1] = 1;
				f(s + 1);
				bj[i1] = 0;
			}
		}
	}
}
int main() {
	ios::sync_with_stdio(false);
	int j, i;
	cin >> n >> k;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			cin >> a[i][j];
		}
	}
	f(0);
	return 0;
}

thought

矩阵中0位置的左不能再上后面
0 1 1
1 0 0
0 1 0
这里有效0为(2,1),(3,3),所以2不能出现在1后面,0不能出现在2后面

标签:11,排列,int,sum,++,问题,i1,后面
来源: https://www.cnblogs.com/jeseesmith/p/15861314.html