思路:输入一个整数n,下面有n行n列,a[i][j]表示第i个车和第j个车进行碰撞时哪一个会被撞翻,0表示都不会被撞翻,1表示第i个车会被撞翻,i车是坏的;2表示第j个车会被撞翻,j车是坏的;3表示两个都会撞翻,表示两个都是坏的。用for循环看看输入的数是对应的哪一种情况。
#include<stdio.h>
#include<string.h>
#define N 1010
int main()
{
int n,i,j;
int a[N][N],b[N];
while(~scanf("%d",&n))
{
int t=n;
for(i=0; i<=n-1; i++)
{
b[i]=i+1;
}
for(i=0; i<=n-1; i++)
{
for(j=0; j<=n-1; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0; i<=n-1; i++)
{
for(j=0; j<=n-1; j++)
{
if(a[i][j]==1)
{
if(b[i]!=0)
{
b[i]=0;
t--;
continue;
}
else
{
continue;
}
}
else if(a[i][j]==2 )
{
if(b[j]!=0)
{
b[j]=0;
t--;
continue;
}
else
{
continue;
}
}
else if(a[i][j]==3)
{
if(b[i]==0&&b[j]!=0 )
{
b[j]=0;
t=t-1;
continue;
}
else if(b[i]!=0 && b[j]!=0)
{
b[i]=0;
b[j]=0;
t=t-2;
continue;
}
else
{
continue;
}
}
}
}
if(t<=0)
{
printf("0\n");
}
else
{
printf("%d\n",t);
for(i=0; i<=n-1; i++)
{
if(b[i]!=0 && i==n-1)
{
printf("%d\n",b[i]);
}
else if(b[i]!=0 && i!=n-1)
{
if(t==1)
{
printf("%d\n",b[i]);
}
else
printf("%d ",b[i]);
}
}
}
}
return 0;
}