原題 http://www.matrix67.com/blog/archives/550 乙個廣搜就過了。 合法解:設mm從a出發,gg從b出發 mm->i gg->a mm->h gg->i mm->g gg->h mm->f->l gg->i mm->e->d gg->h->j mm->c gg->k mm->b gg->b
#include #include #include using namespace std;
const int maxint = 1 << 30;
int n;
char vc[12]; //點的顏色
int e[12]; int p[12][3]; char c[12][3]; //鄰接表
const int qsize = 100000;
int q[qsize][5], qf, qr, qn;
int steps[12][12]; //最優化
inline void enqueue(int a, int b, int s, int prva, int prvb)
void dequeue(int &a, int &b, int &s, int &prva, int &prvb)
int main()
fin.close();
for (int i=0; i0)
}else //較劣移動
continue;
//move a
for (int i=0; iif (c[a][i] == vc[b])
enqueue(p[a][i], b, s+1, a, b);
//move b
for (int i=0; iif (c[b][i] == vc[a])
enqueue(a, p[b][i], s+1, a, b);
}system("pause");
return 0;}/*
valentine.txt
12rycrycrycyrr
15a b c
b c r
c d y
d e c
e f r
f g y
g h c
h i r
i a y
h j r
b k y
e l c
f l y
j k c
k l r
*/