#include "stdio.h" #include "math.h" #define max_isl 15 #define and && #define or || int ant_poly; int size[max_isl]; int poly[max_isl][26][3]; int farge[max_isl]; int kant[15*15*26*26][7]; main() { int korteste; int ant_funnet; FILE *fp1,*fp2; int l,k,i,j; int x_c,y_c; int ant_inst; int ant_hjorner; int ant_kant; int ok_kant(); int jj,kk,g_f; float tot_lengde; fp1 = fopen("islands.in","r"); fp2 = fopen("islands.out","w"); fscanf(fp1,"%d",&ant_inst); for(i=1;i<=ant_inst;i++) { fscanf(fp1,"%d \n",&ant_poly); for(j=1;j<=ant_poly;j++) { fscanf(fp1,"%d ",&ant_hjorner); size[j] = ant_hjorner; for(k=1;k<=ant_hjorner;k++) { fscanf(fp1,"%d %d",&x_c,&y_c); poly[j][k][1] = x_c; poly[j][k][2] = y_c; } } /* Ferdig å lese inn, finner alle mulige kanter */ /* printf("Ferdig å lese inn \n"); */ ant_kant = 0; for(j=1;j x2) minx= x2; maxx = x1; if (maxx < x2) maxx = x2; miny = y1; if (miny > y2) miny= y2; maxy = y1; if (maxy < y2) maxy = y2; if ((minx <= x3) and (x3 <= maxx) and (miny <= y3) and (y3 <= maxy)) return(1); else return(0); } int krysser(x1,y1,x2,y2,x3,y3,x4,y4) int x1,y1,x2,y2,x3,y3,x4,y4; { int retning(); int on_segment(); int d1,d2,d3,d4; d1 = retning(x3,y3,x4,y4,x1,y1); d2 = retning(x3,y3,x4,y4,x2,y2); d3 = retning(x1,y1,x2,y2,x3,y3); d4 = retning(x1,y1,x2,y2,x4,y4); if (((d1>0 and d2<0) or (d1<0 and d2>0)) and ((d3>0 and d4<0) or (d3<0 and d4>0))) return(1); if (d1 == 0 and on_segment(x3,y3,x4,y4,x1,y1)) return(1); if (d2 == 0 and on_segment(x3,y3,x4,y4,x2,y2)) return(1); if (d3 == 0 and on_segment(x1,y1,x2,y2,x3,y3)) return(1); if (d4 == 0 and on_segment(x1,y1,x2,y2,x4,y4)) return(1); return(0); } int ok_kant(x1,y1,x2,y2) int x1,y1,x2,y2; { int i,j,k; int ekte_kant; int krysser(); int n,test; ekte_kant = 1; for(i=1;i<=ant_poly;i++) { n = size[i]; for(j=1;j