nyoj19 擅长排列的小明
2014-11-04 16:11
399 查看
关键字:搜索、回溯、n层循环的实现
参考《任意N重循环的设计方法与应用_肖建华》
参考http://blog.csdn.net/whjkm/article/details/38498317
程序 :1 n重循环非递归程序框架
#define N 100
void n_circle(int n, int *LEFT, int *RIGHT, int *STEP )
{
int a[N+1];
int i,k;
for(i=1; i<=n; i++)
a[i]=LEFT[i];
k=n;
while(k>=1)
{
{ }循环体内处理软件
while(a[k]+STEP[K]>RIGHT[k])
{
a[k]=LEFT[k];
k--;
}
if(k==0) continue;//该处也可为break;
a[k]+=STEP[K];
k=n;
}
}
程序 :2 n重循环递归程序框架
#define N 100
int LEFT[N+1],RIGHT[N+1],STEP[N+1];
int a[N+1];
void recursion_circle(int n, int i )
{
int k;
if(i<n)
{
i++;
for(a[i]=LEFT[i]; a[i]<=RIGHT[i]; a[i]+=STEP[i])
recursion_circle(n,i);
}
else
{循环体内语句;
}
}
我的代码:
#include <iostream>
#include<cstdio>
#include<cstring>
const int maxn=10;
int ans[maxn];//最终结果保存在这个数组
int state[maxn];//状态标记 未访问的为0
int n,m;
using namespace std;
void dfs(int pos);
int main()
{
//freopen("D:\\acm.txt","r",stdin);
int N;
scanf("%d",&N);
while(N--)
{
memset(state,0,sizeof(state));
scanf("%d %d",&n,&m);
dfs(1);
}
return 0;
}
void dfs(int pos)//n层循环的递归框架
{
if(pos==m+1)
{
for(int i=1; i<=m; i++)
printf("%d",ans[i]);
printf("\n");
return;
}
for(int i=1; i<=n; i++)
{
if(state[i]==0)
{
ans[pos]=i;
state[i]=1;
dfs(pos+1);
state[i]=0;//回溯(可以注释下看看结果)
}
}
return;
}
参考《任意N重循环的设计方法与应用_肖建华》
参考http://blog.csdn.net/whjkm/article/details/38498317
程序 :1 n重循环非递归程序框架
#define N 100
void n_circle(int n, int *LEFT, int *RIGHT, int *STEP )
{
int a[N+1];
int i,k;
for(i=1; i<=n; i++)
a[i]=LEFT[i];
k=n;
while(k>=1)
{
{ }循环体内处理软件
while(a[k]+STEP[K]>RIGHT[k])
{
a[k]=LEFT[k];
k--;
}
if(k==0) continue;//该处也可为break;
a[k]+=STEP[K];
k=n;
}
}
程序 :2 n重循环递归程序框架
#define N 100
int LEFT[N+1],RIGHT[N+1],STEP[N+1];
int a[N+1];
void recursion_circle(int n, int i )
{
int k;
if(i<n)
{
i++;
for(a[i]=LEFT[i]; a[i]<=RIGHT[i]; a[i]+=STEP[i])
recursion_circle(n,i);
}
else
{循环体内语句;
}
}
我的代码:
#include <iostream>
#include<cstdio>
#include<cstring>
const int maxn=10;
int ans[maxn];//最终结果保存在这个数组
int state[maxn];//状态标记 未访问的为0
int n,m;
using namespace std;
void dfs(int pos);
int main()
{
//freopen("D:\\acm.txt","r",stdin);
int N;
scanf("%d",&N);
while(N--)
{
memset(state,0,sizeof(state));
scanf("%d %d",&n,&m);
dfs(1);
}
return 0;
}
void dfs(int pos)//n层循环的递归框架
{
if(pos==m+1)
{
for(int i=1; i<=m; i++)
printf("%d",ans[i]);
printf("\n");
return;
}
for(int i=1; i<=n; i++)
{
if(state[i]==0)
{
ans[pos]=i;
state[i]=1;
dfs(pos+1);
state[i]=0;//回溯(可以注释下看看结果)
}
}
return;
}
相关文章推荐
- nyoj19 擅长排列的小明
- NYOJ 19 擅长排列的小明(dsf STL——next_permutation函数)
- nyoj19擅长排列的小明(STL)&&(DFS)
- nyoj 19 擅长排列的小明 【全排列(n中抽取m个数)】
- nyoj 19 擅长排列的小明 【next_permutation() 】
- NYOJ 19 擅长排列的小明
- NYOJ 题目19 擅长排列的小明(非图DFS)
- nyoj 19 擅长排列的小明
- NYOJ 19 擅长排列的小明(dfs递归)
- nyoj19擅长排列的小明(递归)
- nyoj 19擅长排列的小明 (DFS)
- nyoj 19 擅长排列的小明(深搜,next_permutation)
- NYOJ---19擅长排列的小明
- nyoj19(擅长排列的小明)
- nyoj 19 擅长排列的小明
- nyoj-19-擅长排列的小明
- NYOJ-19-擅长排列的小明
- NYOJ19 擅长排列的小明【next_permutation】
- NYOJ19 擅长排列的小明
- nyoj 19 擅长排列的小明