文章

18

粉丝

0

获赞

89

访问

4.2k

头像
二元组整数 题解:使用全排列做索引,预排序 + 重复记录判断
P1024 贵州大学机试题
发布于2025年3月14日 11:21
阅读数 322

 全排列模板

#include<stdio.h>
#include<stdlib.h>

int n,a[11],book[11]= {0};

void dfs(int step) {
	if(step==n) {
		for(int i=0; i<n; i++) {
			printf("%d ",a[i]);
		}
		printf("\n");
		return;
	}
	for(int i=1; i<=n; i++) {
		if(book[i]==0) {
			a[step]=i;
			book[i]=1;
			dfs(step+1);
			book[i]=0;
		}
	}
}

int main() {
	n=3;
	dfs(0);
}

不同的n会产生不同长度的全排列序列,如果把这个序列做成索引,那么无论面对什么数据类型都可以,即便是链表也可以。

题解

#include<stdio.h>
#include<stdlib.h>

int n, a[31], book[31] = {0};
int data[32];
int ans[10001][2];
int ansi=0;
void dfs(int step) {
	if (step == 2) {
		// 重复判断
		for(int i=0; i<ansi; i++) {
			if(ans[i][0]==data[a[0]]&&
			        ans[i][1]==data[a[1]]) {
				return;
			}
		}
		ans[ansi][0]=data[a[0]];
		ans[ansi++][1]=data[a[1]];
		printf("(%d,%d)\n", data[a[0]], data[a[1]]);
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (book[i] == 0) {
			a[step] = i;
			book[i] = 1;
			df...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发