この質問時に理由は様々な形而上学的なエラーのIのレース、最後に、半分を投げるにつながる\(20 \)わずか数分後に\(\ ldots \ ldots \)
まず第一に、この質問が長すぎるったらしいですが、実際にはタイトルはそれを簡単にするために意図され、我々は見つけるでしょう。ため\(I \)寸法、開始と終了経路長が除去(1-I \)\、互いに異なるこれらのノードを必要とします。私たちは、分析(I \)\実際には次元が\(2 ^ I-2 \ ) ノード、私たちは、あなたは結果がわかります彼らに部門を置く(I \)\、であることが\(I \)パス。(おそらくよりも私はYYで盲目です)
どのように各パスを取得するには?突然それを考えるのは、私はゲーム(花火)の時にフラッシュメソッドを使用する必要がありますので、列挙し、リピートするかどうかを決定するハッシュテーブルで、実際の空間と時間がかかり、高価なことですあり
一般的な考え方は、一次元アレイ、添え字を使用することである\(I \)に相当する動作経路内のノード\(I \)の寸法を変更することができます。初期化される(0 \)\最初に対応した、\(1 \)の寸法。最初の動作の後、それが追加される(1 \)\観察した後、我々は、それを見つけ、そして、パスを残して、\(I + 1} F_ {\)その次元に対応する\(F_iと\)の次元プラス\(1 \) 、あなたは対象の要件を満たすことができます。
しかし、あなたが行くように追加されている場合は、問題がある可能性があります(F_iと\)\遅かれ早かれ超えます\(N- \を)。方法は?そして、金型聖歌を取ります!すなわち(1 + F_ {I} =(F_iと+。1)\ N-MOD \)\。
同様に、操作がされるように(F_iと\取得F_iと+。1 \)\。
この方法の原則として、私は、ゲームでちょうど推測を知りません。誰もdalaoは、このメソッドを証明したい場合は、自分で見ることができます。私は将来の証拠を考える場合、それがいっぱいになります。
あなたはまだコードと併せて、理解されていない場合は、より良い食べます。
ACコード:
#include<bits/stdc++.h>
using namespace std;
long long n,f[65];
long long last; //终点的压缩坐标。
string now; //now 为当前节点的坐标。
long long po(long long x) //手打一个计算幂的函数。
{
long long re=1;
for(register long long i=0;i<x;i++) re*=2;
return re;
}
long long zip(string a) //如题,微改的压缩函数。
{
long long size=a.length();
long long h=0;
for(register long long i=size-1;i>=0;i--)
if(a[i]=='1')
h+=po(i);
return h;
}
int main()
{
cin>>n;
cout<<n<<endl; //n 条路径 。
last=po(n)-1;
for(register long long i=0;i<n;i++)
{
cout<<0<<" "; //起点
for(register long long j=0;j<n;j++)
now+='0'; //这是 now 的初始化,将坐标赋为 0。
for(register long long j=1;j<n;j++)
{
now[f[j]]='1'; //精髓,将需改变的维度改变。
f[j+1]=(f[j]+1)%n; //求出 f[i+1]。
f[j]=(f[j]+1)%n; //为防止下一条路径重复,本身也要改变。
long long g=zip(now);
cout<<g<<" "; //输出压缩后的路径。
}
cout<<last<<endl;
now.clear(); //记住!!!一定要清空。
}
return 0;
}
PS:私は常に理解していない、この質問です:私はゲームを起動コンピュートパワーにcmathの捕虜機能ではなく、WAの三点であったであろうし、次に電源機能を求めているカフ付き(大前に霧