CSP考试 2015年12月第3题 画图 C++实现

来源:互联网 发布:网络大电影數據 编辑:程序博客网 时间:2024/06/03 03:41

#include <stdio.h> #include <string.h>//#include <math.h>//测试2个方块染色 //4k。要求小于64k//100分  int find(int NUM1,int NUM2,char* a,int* c, int x,int y,char hello){if((x<NUM1)&&(x>=0)&&(y<NUM2)&&(y>=0)){//a[y][x]=hello;*(a+y*NUM1+x)=hello;if((y+1<NUM2))//上 {//if((c[y+1][x]==0)&&(a[y+1][x]!=hello))if((*(c+(y+1)*NUM1+x)==0)&&(*(a+(y+1)*NUM1+x)!=hello)){find(NUM1,NUM2,a,c,x,y+1,hello);}}if((y-1>=0))//下 {//if((c[y-1][x]==0)&&(a[y-1][x]!=hello))if((*(c+(y-1)*NUM1+x)==0)&&(*(a+(y-1)*NUM1+x)!=hello)){find(NUM1,NUM2,a,c,x,y-1,hello);}}if((x+1<NUM1))//右 {//if((c[y][x+1]==0)&&(a[y][x+1]!=hello))if((*(c+(y)*NUM1+x+1)==0)&&(*(a+(y)*NUM1+x+1)!=hello)){find(NUM1,NUM2,a,c,x+1,y,hello);}}if((x-1>=0))//左{//if((c[y][x-1]==0)&&(a[y][x-1]!=hello))if((*(c+(y)*NUM1+x-1)==0)&&(*(a+(y)*NUM1+x-1)!=hello)){find(NUM1,NUM2,a,c,x-1,y,hello);}} }return 0;}using namespace std; int main(){struct command{int num;int flag;int x1;int y1;int x2;int y2;char c;};int NUM1;int NUM2;scanf("%d",&NUM1);//列数 scanf("%d",&NUM2);//行数 char a[NUM2][NUM1];//存储字符串 int c[NUM2][NUM1];//划线的位置置一 int i;int j;for(i=0;i<NUM2;i++){for(j=0;j<NUM1;j++){a[i][j]='.';}}for(i=0;i<NUM2;i++){for(j=0;j<NUM1;j++){c[i][j]=0;}}int NUM3; scanf("%d",&NUM3);struct command b[NUM3];//命令 memset(b,0,sizeof(b));for(i=0;i<NUM3;i++){int temp=-1;scanf("%d",&temp);if(temp==0){b[i].num=i;b[i].flag=temp;scanf("%d",&b[i].x1);scanf("%d",&b[i].y1);scanf("%d",&b[i].x2);scanf("%d",&b[i].y2);b[i].c=0;}else if(temp==1){b[i].num=i;b[i].flag=temp;scanf("%d",&b[i].x1);scanf("%d",&b[i].y1);b[i].x2=-1;b[i].y2=-1;scanf("%s",&b[i].c);//如果不加空格,会读到空格。 }}int k; for(k=0;k<NUM3;k++){if(b[k].flag==0)//划线 {if(b[k].y1==b[k].y2)//画横线 {if(b[k].x2>=b[k].x1)//从左到右 {for(i=b[k].x1;i<=b[k].x2;i++){if((a[b[k].y1][i]=='|')||(a[b[k].y1][i]=='+')){a[b[k].y1][i]='+';}else{a[b[k].y1][i]='-';}c[b[k].y1][i]=1;}}else//从右到左 {for(i=b[k].x2;i<=b[k].x1;i++){if((a[b[k].y1][i]=='|')||(a[b[k].y1][i]=='+')){a[b[k].y1][i]='+';}else{a[b[k].y1][i]='-';}c[b[k].y1][i]=1;}}}else if(b[k].x1==b[k].x2)//画竖线 {if(b[k].y2>=b[k].y1)//从下到上 {for(i=b[k].y1;i<=b[k].y2;i++){if((a[i][b[k].x1]=='-')||(a[i][b[k].x1]=='+')){a[i][b[k].x1]='+';}else{a[i][b[k].x1]='|';}c[i][b[k].x1]=1;}}else//从上到下 {for(i=b[k].y2;i<=b[k].y1;i++){if((a[i][b[k].x1]=='-')||(a[i][b[k].x1]=='+')){a[i][b[k].x1]='+';}else{a[i][b[k].x1]='|';}c[i][b[k].x1]=1;}}}}if(b[k].flag==1)//填充 {find(NUM1,NUM2,a[0],c[0],b[k].x1,b[k].y1,b[k].c);} }for(i=NUM2-1;i>=0;i--){for(j=0;j<NUM1;j++){printf("%c",a[i][j]);}if(i!=0){printf("\n");}}/*for(i=NUM2-1;i>=0;i--){for(j=0;j<NUM1;j++){printf("%d ",c[i][j]);}printf("\n");}*//*printf("%d ",NUM1);printf("%d ",NUM2);printf("%d\n",NUM3);for(i=0;i<NUM3;i++){printf("%d ",b[i].num);printf("%d ",b[i].flag);printf("%d ",b[i].x1);printf("%d ",b[i].y1);printf("%d ",b[i].x2);printf("%d ",b[i].y2);printf("%c\n",b[i].c);}*/return 0;}

0 0
原创粉丝点击