zoukankan      html  css  js  c++  java
  • CSP201512-03画图 90分

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 #include<algorithm>
     5 #include<stdio.h>
     6 using namespace std;
     7 char a[101][101];
     8 int m,n;//n行m列 
     9 int x1,y1,x2,y2;
    10 int type;
    11 void init(){//初始化为 . 
    12     for(int i=0;i<n;i++){
    13         for(int j=0;j<m;j++){
    14             a[i][j]='.';
    15         }
    16     }
    17 }
    18 bool check(int x,int y,char ch){//判断(x,y)是否可以填充 
    19     if(x<0||y<0||x>m-1||y>n-1){//超出边界,不可填充 
    20         return false;
    21     }
    22     if(a[y][x]=='-'||a[y][x]=='|'||a[y][x]=='+'||a[y][x]==ch){
    23         return false;
    24     }
    25     return true;
    26 }
    27 void fill(int x,int y,char ch){//对于矩阵n*m,从x,y开始用ch来填充  递归填充 
    28     a[y][x]=ch;
    29     if(check(x-1,y,ch)){
    30         fill(x-1,y,ch);
    31     }
    32     if(check(x+1,y,ch)){
    33         fill(x+1,y,ch);
    34     }
    35     if(check(x,y-1,ch)){
    36         fill(x,y-1,ch);
    37     }
    38     if(check(x,y+1,ch)){
    39         fill(x,y+1,ch);
    40     }
    41 }
    42 void draw(){
    43     //y2>y1 x2>x1
    44     if(y2<y1){
    45         int temp=y1;
    46         y1=y2;
    47         y2=temp;
    48     }
    49     if(x2<x1){
    50         int temp=x1;
    51         x1=x2;
    52         x2=temp;
    53     }
    54     if(x1==x2){//同列,画|
    55         for(int i=y1;i<=y2;i++){
    56             if(a[i][x1]=='-') a[i][x1]='+';
    57             else a[i][x1]='|';
    58             
    59             
    60         } 
    61     }
    62     else{
    63         for(int j=x1;j<=x2;j++){
    64             if(a[y1][j]=='|') a[y1][j]='+';
    65             else a[y1][j]='-';
    66         }
    67     }
    68 }
    69 int main(){
    70     int q;
    71     cin>>m>>n>>q;
    72     init(); 
    73     while(q--){
    74         cin>>type;
    75         if(type==1){//填充 
    76          int x,y;
    77          char ch;
    78          cin>>x>>y>>ch;
    79          fill(x,y,ch);
    80         }
    81         else{//画线 
    82             cin>>x1>>y1>>x2>>y2;
    83             draw(); 
    84         }
    85     } 
    86     for(int i=n-1;i>=0;i--){
    87         for(int j=0;j<m;j++){
    88             
    89             cout<<a[i][j];
    90         }
    91         cout<<endl;
    92     }
    93 } 

    做了很久但是还是只有九十分,不知道为什么

    要特别注意,原始题目是在坐标轴上面进行的 现在用矩阵来存储,坐标轴上面的点(x,y)对应矩阵的坐标应该是(y,x)!!!!

  • 相关阅读:
    二维数组实现01背包
    一维数组实现01背包
    js实现最长子串算法
    mysql__存储过程
    mysql 分页查询 limit
    转:严重: Exception loading sessions from persistent storage
    struts2---ValueStack对象
    struts2----ognl
    什么是JavaBean?
    EL表达式
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6568141.html
Copyright © 2011-2022 走看看