解釋解釋希望大家能更好了解,主函數main裡面p[5]是代表符合條件的郵票的數字,每次找到一種然後通過bfs來判斷,通過廣度周遊來搜尋,如果這兒不懂得話,自己去拿資料結構的數來看看,不然這個也不是一兩句就能說清楚的,我的表達能力也不好,通過隊列輔助。num代表第一個數0,也就是p[0],設定一個c,如果最後的值為4,那麼傳回1代表這個數組符合,+1,反之傳回0,有一串很長的if語句裡面的條件是代表判斷兩個數實在同意而還是同一行的,比如4,5不好判斷就通過這個條件來。
另外我有兩個問題如果有大神能幫我解決感激不盡:
1.為什麼那個int v[5]哨兵不能設定為全局變量,一設定就出錯之隻能夠判斷第一個數組,其他的都不能
2.這個題目表述不清,像2,3,6,7,10這樣的數到底能不能符合條件,當然我這題算符合條件
#include<iostream>
#include<cmath>
using namespace std;
struct Que{
int rear=-1;
int front=-1;
int D[10]={0};
};
int bfs(int q[],int num){
int v[5]={0};
int c=0;
Que d;
// cout<<q[num]<<" ";
v[num]=1;
d.D[++d.rear]=num;
while(d.front!=d.rear){
int t=d.D[++d.front];
for(int i=0;i<5;i++){
if(v[i]==0 && ((q[t]+1==q[i]&&(q[t]-1)/4==(q[i]-1)/4)||(q[t]+4==q[i])||(q[t]-1==q[i]&&(q[t]-1)/4==(q[i]-1)/4)||(q[t]-4==q[i]))){
// cout<<q[i]<<" ";
v[i]=1;
d.D[++d.rear]=i;
c++;
}
}
}
if(c==4)
return 1;
return 0;
}
int main(){
int p[5];
int a,b,c,d,e,count=0;
for(a=1;a<9;a++){
for(b=a+1;b<10;b++){
for(c=b+1;c<11;c++){
for(d=c+1;d<12;d++){
for(e=d+1;e<13;e++){
p[0]=a;
p[1]=b;
p[2]=c;
p[3]=d;
p[4]=e;
if(bfs(p,0)==1)//{
count++;
// v[5]=0;
// }
}
}
}
}
}
cout<<count;
}