⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 零件切割问题.cpp

📁 本程序可以实现零件切割问题. 其中的文件均得放在一个目录下
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

#include "draw.h"

struct juxing {
              int height;
              int board;
              
};

struct juxing juxinglab[1000];

struct point
{int i;
 int j;
 } ;
                                    
struct tuxing{
      struct point a;
      struct point d;                                
};
static unsigned long ezdcolor[15]={
	
ezdBlue,

ezdTeal,     
ezdGreen,		
ezdTurquoise,
ezdDarkGray,	
ezdBrown,	 
 ezdPurple,   
ezdLightBlue,ezdLightGray,
ezdGold,     
ezdRed,			
ezdOrange,		
ezdPink,			
ezdYellow,		
ezdBlack};
struct tuxing tuxinglab[1000]; 
void disp( int i,struct juxing juxinglab);
void sort(int N,struct juxing juxinglab[]);  
void make(int N,int W,struct tuxing tuxinglab[],struct juxing juxinglab[]);
void picture( int N,int W,struct tuxing tuxinglab[]);


void main(void)
{   
int N,W;
	int i;
	int k;
FILE *fp;
char path[100];
i=-2;
printf("请输入你的文件名\n");
scanf("%s",path);
if((fp=fopen(path,"rt"))==NULL)
{printf("cannot open file any key exit!");
getchar();
exit(1);
}
fscanf(fp,"%d %d",&N,&W);
while(fscanf(fp,"%d %d ",&juxinglab[++i].height,&juxinglab[i].board)!=EOF);
printf("\n");
fclose(fp);







    printf("排序前:\n");  
    for(i=0;i<N;i++)
    disp(i,juxinglab[i]);
    sort(N,juxinglab);
    printf("排序后:\n") ;  
    for(i=0;i<N;i++)
    disp(i,juxinglab[i]);
    make(N,W,tuxinglab,juxinglab);  
	 openWindow();
	for(k=0;k<N;k++)
	picture(N,W,tuxinglab);
   	viewWindow();
    getchar();
	closeWindow();
   
}


void sort( int N, struct juxing juxinglab[])
{
    int i,j,k;
    struct juxing change;

for(i=0;i<N;i++)
      {k=i;
       for(j=i+1;j<N;j++)
              {if(juxinglab[j].height>juxinglab[k].height)
            k=j;
          }
        if(k!=i)
           { change.height=juxinglab[k].height;
             juxinglab[k].height=juxinglab[i].height;
             juxinglab[i].height=change.height;
             change.board=juxinglab[k].board;
             juxinglab[k].board=juxinglab[i].board;
             juxinglab[i].board=change.board; 
           }
        }
    }
    
void disp( int i, struct juxing juxinglab)
{
printf("%d\t%d,%d\n",i,juxinglab.height,juxinglab.board);
}

void make( int N, int W,struct tuxing tuxinglab[],struct juxing juxinglab[])
{
int w;
int k;
int h;
int p;
    
tuxinglab[0].a.i=0;
tuxinglab[0].a.j=0;
tuxinglab[0].d.i=juxinglab[0].board;
tuxinglab[0].d.j=juxinglab[0].height;

printf("%d,%d\t%d,%d\n",tuxinglab[0].a.i,tuxinglab[0].a.j,
tuxinglab[0].d.i,tuxinglab[0].d.j);


w=juxinglab[0].board;
h=juxinglab[0].height;
for(k=1;k<N;k++)
{if((w+=juxinglab[k].board)<=W)
{
p=k;
tuxinglab[k].a.j=tuxinglab[--p].a.j;
tuxinglab[k].a.i=tuxinglab[p].d.i; 
tuxinglab[k].d.i=tuxinglab[p].d.i+juxinglab[k].board;
tuxinglab[k].d.j=tuxinglab[p].a.j+juxinglab[k].height;
}
else 
{
tuxinglab[k].a.j=h;
tuxinglab[k].a.i=0;
tuxinglab[k].d.i=juxinglab[k].board;
tuxinglab[k].d.j=juxinglab[k].height+h;
w=juxinglab[k].board;
h+=juxinglab[k].height;
continue;
}

}

for(k=1;k<N;k++)
{printf("%d,%d\t%d,%d\n",tuxinglab[k].a.i,tuxinglab[k].a.j,
tuxinglab[k].d.i,tuxinglab[k].d.j);
}

printf("此切割问题的高度为%d\n",h);

}
void picture ( int N,int W,struct tuxing tuxinglab[])
  {
  int k;
  int  p;
  ezdSetColor(ezdBlue); 
  
  if(W>100){
	   p=W/100+1;
	   W=W/p;}
  else p=1;

   ; 
ezdDrawLine(W, 0, W, 100);
  for(k=0;k<N;k++)
  {ezdSetColor(ezdcolor[k%15]);
  delayWindow(0.1);

  ezdDrawRectangle(
	  tuxinglab[k].a.i/p,
      tuxinglab[k].a.j/p,
               
      tuxinglab[k].d.i/p,
      tuxinglab[k].d.j/p
      
   );
  }

}
                           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -