Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<conio.h>
- #include<math.h>
- struct point_t { //структура точки
- int x;
- int y;
- };
- const int N=3;
- double MAX=0; //MAX-максимальный периметр
- int n,C=0;
- int mount=0;
- struct point_t t[N+1]; //структурный массив данных точек
- struct point_t mas[N+1]; // структурный массив построенных в данный момент рекурсией
- int tn[N][N]; //таблица имеющихся графов
- int isUsed(int a,int b){ // Не сложно понять что делает функция
- return tn[a][b];
- }
- void MarkGraf(int a,int b) { // Не сложно понять что делает функция
- tn[b][a] = 0;
- tn[a][b] = 0;
- }
- void UnMarkGraf(int a,int b){// Не сложно понять что делает функция
- tn[b][a] = 1;
- tn[a][b] = 1;
- }
- void addGraf(int a){
- // p++;
- mas[p].x = t[a].x;
- mas[p].y = t[a].y;
- //MarkGraf(a,b);
- }
- void removeGraf(){
- //UnMarkGraf(mas[C].x,mas[C].y);
- mas[p].x = -1;
- mas[p].y = -1;
- p--;
- }
- double fdlina(double x1,double x2,double y1,double y2)
- {
- double dlina=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
- return dlina;
- }
- void LogBoard(){ // выводит текущую длину в консоль
- float loggedCount = 0;
- for(int i =0;i<N-1;i++){
- loggedCount+=fdlina(mas[i].x,mas[i+1].x,mas[i].y,mas[i+1].y);
- }
- printf(" \n%f",loggedCount);
- }
- void graf(int p)
- {
- if (/*(mas[p].x==-1)&&(mas[p].y==-1)*/mount==0) {// проверка на постановку первого графа
- for (int i=0;i<N;i++) {
- mas[p]=t[i];
- //p++;
- mount++;
- graf(p); } }
- //надо сделать проверку
- if ((mas[0].x==mas[p].x)&&(mas[0].y==mas[p].y)&&(mount!=1)) {//вывод длины
- LogBoard();
- }
- for (int i=0;i<N;i++) { //постановка графов
- for (int j=0;j<N;j++){
- if ((isUsed(i,j)==1)||(isUsed(j,i)==1)) {
- p++;
- addGraf(j);
- MarkGraf(i,j);
- //LogBoard();
- graf(p);
- removeGraf();
- UnMarkGraf(i,j);
- p--;
- } } }
- }
- int main()
- {
- for (int i=0;i<N;i++) {
- for (int j=0;j<3;j++) if(i!=j) tn[i][j]=1; }
- for (int i=0;i<100;i++) {mas[i].x=-1; mas[i].y=-1; }
- //LogBoard();
- for (int i=0;i<N;i++) scanf("%d%d",&t[i].x,&t[i].y); //ввод точек в массив структур
- //for (int i=0;i<N;i++) printf("%d,%d",t[i].x,t[i].y);
- graf(0);
- //for (int i=0;i<N;i++) mas[i]=t[i];
- //printf("%d",perimetr(mas[]));
- //for (int i=0;i<N;i++) printf("(%d;%d)",t[i].x,t[i].y);
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement