第15届浙江省赛题 (dfs)

题意是给你个数(1-9)  表示密码里的数,用这几个数能组成多少个合法的密码并输出;

不和法的有132    及1连3 时经过了2   但是2有没有被走过 所以是不存在的    排除这种情况就行了

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

int n,mark[10],map[10],num[10];
int leap[11][11];
int sum;
int judge(int a,int b)
{
	int x=leap[a][b];
	if(x==0) return 0;
	if(mark[x]==0) return 1;
	return 0;
}
int ans[150000][11];
int dfs(int t)
{
	if(t==n+1)
	{
		sum++;
		for(int i=1;i<=n;i++)
		ans[sum][i]=num[i];
		//printf("%d\n",sum);
		return 0;
	}
	int i;
	for(i=1;i<=9;i++)
	{
		if(map[i]==1&&mark[i]==0)
		{
			int flash=0;
			flash=judge(num[t-1],i);
			//printf("%d %d %d\n",num[t-1],i,flash);
			if(!flash)
			{
				mark[i]=1;
				num[t]=i;
				dfs(t+1);
				num[t]=0;
				mark[i]=0;
			}
		}
	}
	return 0;
}
int main()
{
	int T,i,j;
	scanf("%d",&T);
	memset(leap,0,sizeof(leap));
	leap[1][3]=leap[3][1]=2;
	leap[1][7]=leap[7][1]=4;
	leap[1][9]=leap[9][1]=5;
	leap[2][8]=leap[8][2]=5;
	leap[3][7]=leap[7][3]=5;
	leap[3][9]=leap[9][3]=6;
	leap[4][6]=leap[6][4]=5;
	leap[7][9]=leap[9][7]=8;
	while(T--)
	{
		scanf("%d",&n);
		memset(mark,0,sizeof(mark));
		memset(map,0,sizeof(map));
		for(i=1;i<=n;i++)
		{
			int a;
			scanf("%d",&a);
			map[a]=1;
		}
		sum=0;
		dfs(1);
		printf("%d\n",sum);
		for(i=1;i<=sum;i++)
		{
			for(j=1;j<=n;j++)
			{
				if(j!=1) printf(" ");
				printf("%d",ans[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}
时间: 2024-10-30 20:52:49

第15届浙江省赛题 (dfs)的相关文章

第15届浙江省赛 E LIS

LIS Time Limit: 1 Second      Memory Limit: 65536 KB      Special Judge DreamGrid is learning the LIS (Longest Increasing Subsequence) problem and he needs to find the longest increasing subsequence of a given sequence  of length . Recall that A subs

第14届浙江省赛--Let&#39;s Chat

Let's Chat Time Limit: 1 Second      Memory Limit: 65536 KB ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technology Company. To attract more users, Edward, the boss of Marjar Company, has recently added

湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)

Biggest Number 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 You have a maze with obstacles and non-zero digits in it: You can start from any square, walk in the maze, and finally stop at some square. Each step, you may only walk into one of the four neighb

ZOJ 3879 Capture the Flag 15年浙江省赛K题

每年省赛必有的一道模拟题,描述都是非常的长,题目都是蛮好写的... sigh... 比赛的时候没有写出这道题目 :( 题意:首先输入4个数,n,q,p,c代表有n个队伍,q个服务器,每支队伍的初始分数p, 还有c次操作对于每次操作,首先输入一个k,代表k次攻击每次攻击有三个数,a,b,c, 代表a通过c服务器成功的攻击了b对于每次成功的攻击,b会失去n-1分, 这n-1分会平分给通过同一服务器攻击b的几支队伍然后是q行,每行n个数, 分别代表1~n是否成功维护了,1为成功,0为不成功不成功的队伍

第十四届浙江省赛

题目真的是从易到难的顺序,而且跨度非常合理,只是看到榜单上后5题只有一支队做出来了一个,其他的没人做出来啊.. A - Cooking Competition 水题. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n, a; 5 6 int main() { 7 // freopen("in", "r", stdin); 8 int T; 9 scanf("%d",

CSU 1507 超大型LED显示屏 第十届湖南省赛题

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507 解题思路:这是一道模拟题,看了那么多人的代码,我觉得我的代码是最简的,哈哈,其实就是分数变幻的时候要计算灯管的亮数复杂一点,我就直接暴力咯 AC代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std;

CSU 1511 残缺的棋盘 第十届湖南省赛题

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1511 题目大意:在一个8*8的棋盘中,给你一个起点位置和一个终点位置,同时也给你一个陷阱位置,问你从起点绕过陷阱到终点的最短距离.(可以上下左右走还可以斜走) 解题思路:可以直接用搜索,也可以用数学知识来解决,我们之前学过,两点之间直接最短,所以当陷阱不在这条直线上的时候,我们就不用考虑陷阱了,直接是max(abs(x1-y1),abs(x2-y2))最终结果, 但是如果陷阱在两条直线

第七届河南省赛A.物资调度(dfs)

10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 95  Solved: 54 [Submit][Status][Web Board] Description 某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷.衣物.食品和血浆等物资.可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁.国家立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资. 一方有难,八方支援.现在已知有N个地方分别

Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)

Crack Mathmen TimeLimit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 Since mathmen take security very seriously, theycommunicate in encrypted messages. They cipher their texts in this way: for everycharacther c in the message, they replace c wit