藍橋杯題 五星填數(dfs)



標題:五星填數

如【圖1.png】的五星圖案節點填上數字:1~12,除去7和11。
要求每條直線上數字和相等。

如圖就是恰當的填法。

請你利用計算機搜索所有可能的填法有多少種。
注意:旋轉或鏡像後相同的算同一種填法。

請提交表示方案數目的整數,不要填寫任何其它內容。


#include<stdio.h>  
int map[11]={0};  
int visit[11]={0};  
int sum=0;  
void dfs(int n)  
{  
    int i;   
    if(n==11)  
    {  
	    int a,b,c,d,e;
	    a=map[2]+map[3]+map[4]+map[5];
	    b=map[1]+map[3]+map[6]+map[9];
	    c=map[2]+map[6]+map[8]+map[10]; 
	    d=map[1]+map[4]+map[7]+map[10];
	    e=map[5]+map[7]+map[8]+map[9];
        if(a==b&&b==c&&c==d&&d==e)  
        {  
        	sum++;  
        }  
         return;  
    }  
    for(i=1;i<13;i++)  
    {  
        if(i!=7&&i!=11&&!visit[i])  
        {  
           visit[i]=1;  
            map[n]=i;  
            dfs(n+1);  
            visit[i]=0;  
        }  
    }  
}  
int main()  
{  
    dfs(1);  
    printf("%d\n",sum);  
    return 0;  
}  


發佈了41 篇原創文章 · 獲贊 36 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章