解題報告:
| |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
| 1 |
|
|
H |
|
|
|
H |
|
|
|
|
|
|
|
| 2 |
|
|
| |
|
|
|
| |
|
|
|
|
|
|
|
| 3 |
H |
- |
O |
- |
H |
- |
O |
- |
H |
|
|
|
|
|
| 4 |
|
|
| |
|
|
|
| |
|
|
|
|
|
|
|
| 5 |
|
|
H |
|
|
|
H |
|
|
|
|
|
|
|
| 6 |
|
|
| |
|
|
|
| |
|
|
|
|
|
|
|
| 7 |
H |
- |
O |
- |
H |
- |
O |
- |
H |
|
|
|
|
|
| 8 |
|
|
| |
|
|
|
| |
|
|
|
|
|
|
|
| 9 |
|
|
H |
|
|
|
H |
|
|
|
|
|
|
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
首先按如上這種方式進行表格填充,然後根據輸入的矩陣表示來刪除'-'和‘|’字元
#include <iostream>#include <cstdio>using namespace std;int asmx[12][12];char sice[50][50];void initSice(int m){memset((void*)sice,' ',50*50);int i,j;char ch;for (j = 0; j<=4*m+2; ++j)sice[0][j]='*';for (j = 0; j<=4*m+2; ++j)sice[4*m+2][j]='*';for (i = 0; i<=4*m+2; ++i)sice[i][0]='*';for (i = 0; i<=4*m+2; ++i)sice[i][4*m+2]='*';for (i=1;i <= 4*m+1; ++i){if (i%4 == 1)ch = 'H';else if(i%4 == 2 || i%4 == 0)ch = '|';else //if(i%4 == 3)ch = 'O';for (j=3; j<=4*m+1 ; j+=4)sice[i][j] = ch;}for (i=3;i <= 4*m+1; i+=4){for (j=1; j<=4*m+1 ; ++j){if (j%4 == 1)ch = 'H';else if (j%4==2 || j%4==0)ch = '-';else ch = 'O';sice[i][j] = ch;}}}void decipher(int m){int i,j,si,sj;int dh,dv;{//第一行i = 1;si = 3;for (j=1; j<=m; ++j){sj = j*4-1;if (asmx[i][j])//第一行不可能出現-1{sice[si-1][sj] = ' ';sice[si+1][sj] = ' ';}else{sice[si-1][sj] = ' ';if (j == 1){sice[si][sj+1] = ' ';}else{if (sice[si][sj-3] == '-')sice[si][sj-1] = ' ';else//sice[si][sj-3]==''sice[si][sj+1] = ' ';}}}}{//中間行for (i=2; i<=m-1; ++i){si = i*4-1;for (j=1; j<=m; ++j){sj = j*4-1;if (asmx[i][j] == 0){if (j == 1){sice[si][sj+1] = ' ';if (sice[si-3][sj] == '|')sice[si-1][sj] = ' ';elsesice[si+1][sj] = ' ';}else{if (sice[si-3][sj] == '|')sice[si-1][sj] = ' ';elsesice[si+1][sj] = ' ';if (sice[si][sj-3] == '-')sice[si][sj-1] = ' ';else//sice[si][sj-3]==''sice[si][sj+1] = ' ';}}else if (asmx[i][j] == 1){sice[si-1][sj] = ' ';sice[si+1][sj] = ' ';}else// asmx[i][j] == -1{sice[si][sj-1] = ' ';sice[si][sj+1] = ' ';}}}}{//最後一行i=m;si = 4*m-1;for (j=1; j<=m; ++j){sj = j*4-1;if (asmx[i][j])//最後一行不可能出現-1{sice[si-1][sj] = ' ';sice[si+1][sj] = ' ';}else{sice[si+1][sj] = ' ';if (j == 1){sice[si][sj+1] = ' ';}else{if (sice[si][sj-3] == '-')sice[si][sj-1] = ' ';else//sice[si][sj-3]==''sice[si][sj+1] = ' ';}}}}}void p(int m){int i,j;for (j=0; j<=4*m+2 ; ++j)cout<<sice[0][j];cout<<endl;for (i=3;i <= 4*m-1; ++i){for (j=0; j<=4*m+2 ; ++j)cout<<sice[i][j];cout<<endl;}for (j=0; j<=4*m+2 ; ++j)cout<<sice[4*m+2][j];cout<<endl;}int main(){freopen("in.txt","r",stdin);int m;// m <= 11int i,j;int index = 1;while (cin>>m){if (m == 0)break;for (i = 1; i <= m; ++i)for (j = 1; j <= m; ++j)cin>>asmx[i][j];initSice(m);cout<<"Case "<<index++<<":"<<endl<<endl;decipher(m);p(m);cout<<endl;}}
測試資料
1
1
2
0 1
1 0
4
0 1 0 0
1 -1 0 1
0 0 1 0
0 1 0 0
5
0 1 0 0 0
1 -1 0 1 0
0 1 0 -1 1
0 0 0 1 0
0 0 1 0 0
0