כותרת: פתרון קצר
היי.
זה הפתרון הכי קצר שמצאנו…
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define S (5)
const int N=S*(S+1)/2; bool u[N]={0}; bool e(int*p,int l){if(l){int
n_a={0};for(int i=0,x=((x=p-p[i+1])>0)?(x)-x);i<l-1;i++
,x=((x=p-p[i+1])>0)?(x)-x))if(u[x-1])return 0;else u[x-1]=1;
for(i=0;i<l-1;n_a n_a=p-p[i+1])>0?(n_a)-n_a),i
++);for(i=0;i<l;u[n_a-1]=1,i++); return e(n_a,l-1); } return 1
;}int a={0};void d(int c){int pn=0;if(c>=S){for(int i=0;i<S;printf
("%d ",a),i++);printf("n");}else do{for(int k=0;k<N;u[k]=0,k++);
for(int i=0;i<c;u[a-1]=1,i++); int n=pn; do if(++n>N)return;while(
u[n-1]);if(n){a[c]=n;u[n-1]=1;bool res=e(a,c+1);if(res)d(c+1);u[n-1]=
0;a[c]=0;pn=n;}else return;}while(1);}void main(){for(int n=1;n<=N;a[
0]=n,d(1),n++);}