Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void genMatrix(unsigned **matrix, unsigned width, unsigned height)
- {
- unsigned blankW = width;
- unsigned blankH = height - 1;
- unsigned w = 0u;
- unsigned h = 0u;
- unsigned count = 0u;
- char route = 'r'; // r - right, d - down, l - left, u - up.
- while (blankW + blankH)
- {
- // Go to the right.
- for (unsigned i = 0; i < width - (width - blankW); ++i)
- {
- matrix[h][w] = ++count;
- ++w;
- }
- --w;
- --blankW;
- if (!blankH && !blankW) break;
- // Go to the down.
- ++h;
- for (unsigned i = 0; i < height - (height - blankH); ++i)
- {
- matrix[h][w] = ++count;
- ++h;
- }
- --h;
- --blankH;
- if (!blankH && !blankW) break;
- // Go to the left.
- --w;
- for (unsigned i = 0; i < width - (width - blankW); ++i)
- {
- matrix[h][w] = ++count;
- --w;
- }
- ++w;
- --blankW;
- if (!blankH && !blankW) break;
- // Go to the up.
- --h;
- for (unsigned i = 0; i < height - (height - blankH); ++i)
- {
- matrix[h][w] = ++count;
- --h;
- }
- --blankH;
- if (!blankH && !blankW) break;
- ++h;
- ++w;
- }
- }
- void printMatrix(unsigned **matrix, unsigned width, unsigned height)
- {
- for (unsigned i = 0; i < height; ++i)
- {
- for (unsigned j = 0; j < width; ++j)
- {
- printf("%4d", matrix[i][j]);
- }
- puts("");
- }
- }
- int main()
- {
- unsigned width, height;
- // Get user data.
- printf("Input matrix width: ");
- scanf_s("%u", &width);
- printf("Input matrix height: ");
- scanf_s("%u", &height);
- // Allocate memory.
- unsigned **matrix = (unsigned **)malloc(height * sizeof(unsigned *));
- for (unsigned i = 0; i < height; ++i)
- {
- matrix[i] = (unsigned *)malloc(width * sizeof(unsigned));
- }
- // Generate a matrix.
- genMatrix(matrix, width, height);
- // Draw a snail:)
- printMatrix(matrix, width, height);
- // Free
- for (unsigned i = 0; i < height; ++i)
- {
- free(matrix[i]);
- }
- free(matrix);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement