您的位置:首页 > 其它

nyoj19(擅长排列的小明)

2014-07-04 18:11 211 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=19题目解析:先生成排列数,然后进行深搜。代码如下:
01.
#include<stdio.h>
02.
//深度优先搜索
03.
int
 
vis[11]={0};
//存储走过标记
04.
int
 
b[11];
//存储走过的数字
05.
int
 
n,m;
//全局数字
06.
 
07.
void
 
dfs(
int
 
c)
//c用来记录用来排序的个数
08.
{
09.
if
(c
== m)
//当个数满足选择的要求个数时就输出
10.
{
11.
for
(
int
 
i=0;i<m;i++)
12.
printf
(
"%d"
,b[i]);
13.
printf
(
"\n"
);
14.
}
15.
else
16.
{
17.
for
(
int
 
i=1;i<=n;i++)
//从第一个开始找..
18.
{
19.
if
(!vis[i])
//找到没有用过的
20.
{
21.
vis[i]=!vis[i];
//标记为用过的
22.
b[c]=i;
//并且把这个数存入
23.
dfs(c+1);
//再从这里开始进入下一个数字的搜索
24.
vis[i]=!vis[i];
//一轮搜索完毕把标记用过的标记回没用过的,再返回for从下一个i开始找
25.
}
26.
}
27.
}
28.
}
29.
 
30.
int
 
main()
31.
{
32.
int
 
N;
33.
scanf
(
"%d"
,&N);
34.
while
(N--)
35.
{
36.
scanf
(
"%d%d"
,&n,&m);
37.
dfs(0);
38.
}
39.
return
 
0;
40.
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: