图的dfs加回溯---小学组第二题 选座位

标签:
365 |
分类: 小学安徽省奥赛 |
http://s14/mw690/ceb2fea6gdf7c65f2c8ad&690选座位" TITLE="图的dfs加回溯---小学组第二题
图的dfs递归回溯
#include
using namespace std;
#define maxn
#define
int n,m;
int a[maxn+1][maxn+1]={0};
int
void read()
{
{
cin>>x>>y;
a[x][y]=1;//有边时,权植为1,没有边,权值为0
a[y][x]=1;//无向图
}
for(int i=1;i<=maxn;i++)
}
visit[k]=1;//本顶点访问过了,作标记
for(int i=1;i<=n;i++)
//搜索所有与本顶点相连的未访问过的顶点i
if((a[k][i]==1)&&(visit[i]==0))
visit[k]=0;//回溯
int main()
{
for(int i=1;i<=n;i++)
cout<<"现在以"<<i<<"为顶点dsf";
dfs(i);
cout<<endl;
}
2.换座位(shuffle)
在你的帮助下,聪聪很快解决了这个问题,信心又回来了。老师为了奖励聪聪这种知难
而进的精神,决定把今年的庆祝少先队建队
聪聪可高兴了,他召集了班上的少先队员一起来讨论,最终确定了这样一个游戏:班上
共有
每次击鼓开始时,前
2N-1
一个节目。聪聪不断的击鼓然后停顿后又击鼓,同学们都觉得这个游戏很好玩,但是当游戏
结束时,同学们傻眼了,由于每位同学的板凳都差不多,他们找不到自己的板凳了。这次聪
聪反应特别快,他说经过一定次数的换座位,每位同学一定能回到自己的板凳的。那么这个
次数最少是多少呢?你会计算吗?
【输入文件】
输入共一行,一个正整数
【输出文件】
输出文件一个正整数,每位同学都回到自己板凳的最少换座位次数。
【输入输出样例】
shuffle.in
10
【数据范围】
1≤N≤10,000。
#include
using namespace std;
#define maxn
int a[maxn],b[maxn];
int num;
int judge(int n)
{
}
void read()
{
for(int i=1;i<=2*n;i++)//存放以前的人
for(int i=1;i<=2*n;i++)
int num=0;
do
{
for(int i=1;i<=n;i++)
b[2*i]=a[i];//把前n个数移到b[2.4.6..2*n]
for(int i=n+1;i<=2*n;i++)
b[(i-n)*2-1]=a[i];//把后n个数移b[135..2*n-1]
if(judge(2*n)==1)
for(int i=1;i<=2*n;i++)
while(1);//可以 结束了
cout<<num<<endl;
}
int main()
{