有向图
N个节点,从A到B需要更改默认开关的次数最少
每一行表示该节点可以到达的地方,第一个数表示目的数,第二个数表示默认目的。
方案一:DFS
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxN=1005;
int table[maxN][maxN];
int vis[maxN];
int ans=2000000000;
int N,A,B;
void dfs(int start, int step){
if(step>=ans)return;
if(start==B){ans=step;return;}
vis[start]=1;
if(table[start][0]&&!vis[table[start][1]])dfs(table[start][1],step);
for(int i=2;i<=table[start][0];i++)
if(!vis[table[start][i]])dfs(table[start][i],step+1);
vis[start]=0;
}
int main()
{
//freopen("in1.txt","r",stdin);
while(cin>>N>>A>>B){
memset(table,0,sizeof(table));
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++){
cin>>tabl