Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<math.h>
  5.  
  6. struct point_t { //структура точки
  7.     int x;
  8.     int y;
  9. };
  10.  
  11. const int N=3;
  12. double MAX=0; //MAX-максимальный периметр
  13. int n,C=0;
  14. int mount=0;
  15. struct point_t t[N+1]; //структурный массив данных точек
  16. struct point_t mas[N+1]; // структурный массив построенных в данный момент рекурсией
  17. int tn[N][N]; //таблица имеющихся графов
  18.  
  19. int isUsed(int a,int b){ // Не сложно понять что делает функция
  20.  
  21.     return tn[a][b];
  22. }
  23.  
  24. void MarkGraf(int a,int b) { // Не сложно понять что делает функция
  25.  
  26.     tn[b][a] = 0;
  27.     tn[a][b] = 0;
  28. }
  29. void UnMarkGraf(int a,int b){// Не сложно понять что делает функция
  30.  
  31.     tn[b][a] = 1;
  32.     tn[a][b] = 1;
  33. }
  34.  
  35. void addGraf(int a){
  36.    // p++;
  37.     mas[p].x = t[a].x;
  38.     mas[p].y = t[a].y;
  39.     //MarkGraf(a,b);
  40. }
  41.  
  42. void removeGraf(){
  43.     //UnMarkGraf(mas[C].x,mas[C].y);
  44.     mas[p].x = -1;
  45.     mas[p].y = -1;
  46.     p--;
  47. }
  48.  
  49. double fdlina(double x1,double x2,double y1,double y2)
  50. {
  51.     double dlina=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
  52.     return dlina;
  53. }
  54.  
  55. void LogBoard(){ // выводит текущую длину в консоль
  56.     float loggedCount = 0;
  57.     for(int i =0;i<N-1;i++){
  58.         loggedCount+=fdlina(mas[i].x,mas[i+1].x,mas[i].y,mas[i+1].y);
  59.     }
  60.     printf(" \n%f",loggedCount);
  61. }
  62.  
  63. void graf(int p)
  64. {
  65.    
  66.     if (/*(mas[p].x==-1)&&(mas[p].y==-1)*/mount==0) {// проверка на постановку первого графа
  67.         for (int i=0;i<N;i++) {
  68.             mas[p]=t[i];
  69.             //p++;
  70.             mount++;
  71.             graf(p); }  }
  72.     //надо сделать проверку
  73.    
  74.     if ((mas[0].x==mas[p].x)&&(mas[0].y==mas[p].y)&&(mount!=1)) {//вывод длины
  75.         LogBoard();
  76.    
  77.     }
  78.    
  79.     for (int i=0;i<N;i++) { //постановка графов
  80.         for (int j=0;j<N;j++){
  81.             if ((isUsed(i,j)==1)||(isUsed(j,i)==1)) {
  82.                 p++;
  83.                 addGraf(j);
  84.                 MarkGraf(i,j);
  85.                 //LogBoard();
  86.                 graf(p);
  87.                 removeGraf();
  88.                
  89.                 UnMarkGraf(i,j);
  90.                 p--;
  91.                  } } }
  92.        
  93. }
  94.  
  95. int main()
  96. {
  97.     for (int i=0;i<N;i++) {
  98.         for (int j=0;j<3;j++) if(i!=j) tn[i][j]=1; }
  99.  
  100.     for (int i=0;i<100;i++) {mas[i].x=-1; mas[i].y=-1; }
  101.     //LogBoard();
  102.  
  103.     for (int i=0;i<N;i++) scanf("%d%d",&t[i].x,&t[i].y); //ввод точек в массив структур
  104.     //for (int i=0;i<N;i++) printf("%d,%d",t[i].x,t[i].y);
  105.     graf(0);
  106.     //for (int i=0;i<N;i++) mas[i]=t[i];
  107.     //printf("%d",perimetr(mas[]));
  108.     //for (int i=0;i<N;i++) printf("(%d;%d)",t[i].x,t[i].y);
  109.     getch();
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement