做暧暧视频免费视频中国网站,上海网站建设seo1888,查一下红之易道学做的什么网站,镇江做网站需要多少钱小小注解#xff1a;
1.
vis#xff1a;表示到达该状态的步数#xff08;min#xff09;1#xff0c;
因为我们是从开始状态 穷举#xff0c;所以每次到一个新状态#xff08;之前没有到过的状态#xff09;就是最小步数。
如何判断是否是一个新状态呢#xff0c…小小注解
1.
vis表示到达该状态的步数min1
因为我们是从开始状态 穷举所以每次到一个新状态之前没有到过的状态就是最小步数。
如何判断是否是一个新状态呢vis 知道如果是新状态 vis0
另外把开始状态设置为1设置为 0 的话程序就会把开始状态当作一个新状态而开始状态当然不是一个新状态。
11.
开 初始1 0 1 0 关 初始1 0 1 0 开 1 1 0 0 | 关 1 1 0 0 结果 1 1 1 0 结果 0 0 1 0 初始 | 开 结果 ~关 0 0 1 1 初始 (~ 关 结果
111.
开始状态的得到
例: n4时开始状态1 1 1 1即 (1n)-1 ;
注意括号不能省以为 1n-1 1(n-1);
#includeiostream
#includequeue
using namespace std;
int a[3300],b[3300]; //开灯 关灯 一个操作拆成两个 分别存在 a b中
int vis[3300]; //到达该状态的步数1
//对于一种状态 1改灯开 0关
int main(){int n,m; cinnm;for(int i0;im;i)for(int j0;jn;j){int x; scanf(%d,x);a[i]1; b[i]1;if(x1) b[i];if(x-1) a[i]; }queueintq;q.push((1n)-1);vis[(1n)-1]1;while(q.size()){int numq.front(); q.pop();for(int i0;im;i){int tempnum|a[i];temptemp(~b[i]);if(vis[temp]) continue;vis[temp]vis[num]1; q.push(temp);if(temp0){printf(%d,vis[0]-1); return 0;}}}printf(-1);return 0;
}