Em vừa làm xong bài ziczac nhưng gặp một vấn đề "BIG" về thuật tóan nên in ra được nửa phần trên đường chéo phụ đúng theo hình zizcac . Nhưng phần còn lại trên đường chéo phụ thì chưa đúng.
Mong mọi người nghiên cứu và cho ý kiến.
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
void nhap();
void xuat();
void xuli();
int n;
int a[100][100];
void main()
{
nhap();
xuli();
xuat();
}
void nhap()
{
ifstream fi;
fi.open("data.txt");
fi>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=0;
}
}
fi.close();
}
void xuat()
{
ofstream fo;
fo.open("out.txt");
for(int j=0;j<n;j++)
{
fo<<endl;
for(int i=0;i<n;i++)
{
fo<<a[j][i]<<" ";
}
}
fo.close();
}
void xuli()
{
int m=n*n;
int i=0; int j=0;
a[i][j]=1;
i=1;
int d=0;
for(int k=2;k<=m;k++)
{
a[i][j]=k;
switch(d)
{
case 0:
if(i>=j)
{
d=1;
i--;
j++;
}
else
{
d=2;
i++;
j--;
}
break;
case 1:
if(a[i-1][j+1]==0)
{
i--;
j++;
}
else
{
if(j==n-1)
{
d=0;
i++;
}
else
{
d=3;
j++;
}
}
case 2:
if(a[i+1][j-1]==0)
{
i++;
j--;
}
else
{
if(i==n-1)
{
d=3;
j++;
}
else
{
d=0;
i++;
}
}
break;
case 3:
if(i<=j)
{
d=2;
i++;
j--;
}
else
{
d=1;
i--;
j++;
}
break;
}
}
}