题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
//抄的大佬的dfs算法,确实感觉这道题和迷宫问题很像,但是对于选两个数去加减乘除然后展开还有回溯实在是一团乱麻,感觉大佬的思路简洁明了又清晰,从第一个数开始深搜(类似于迷宫问题的起点),然后对四个方向进行加减乘除的遍历(类似迷宫四个方向,但是四个方向的格子里都有数值,数值是一层一层放的,比如第一层上下左右放的是a[1],第二层a[2],第三层a[3]),没有结果就回溯。 #include <stdio.h> int visit[4]={1,0,0,0}; int dfs(int*arr,int num) { if(num==24) return 1; for(int i=0;i<4;i++) { if(visit[i]==0) { visit[i]=1; if(dfs(arr,num+arr[i])||dfs(arr,num-arr[i])||dfs(arr,num*arr[i])||dfs(arr,num/arr[i])) return 1; visit[i]=0; } } return 0; } int main() { int arr[4]={0}; scanf("%d %d %d %d",&arr[0],&arr[1],&arr[2],&arr[3]); int num=arr[0]; int result=dfs(arr,num); if(result==1) printf("true\n"); else printf("false\n"); return 0; }