方法一:
#include<iostream>
using namespace std;
int N;//N表示顶点,有向图
int main()
{
scanf("%d",&N);
int i,j;
int **area=new int*[N];
for(i=0;i<N;i++)
area[i]=new int[N];
printf("Input the matrix:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&area[i][j]);
}
}
i=0;
j=0;
while(i<N&&j<N)
{
if(area[i][j]==0)
{
j=j+1;
}
else if(i==j)
{
i++;
j++;
}
else
i=j;
}
if(i>=N)
{
printf("No point\n");
}
else
{
for(j=0;j<i;j++)
{
if(area[i][j]==1)
{
printf("No point\n");
return 0;
}
}
for(i=0;i<N;i++)
{
if(i==j)
continue;
if(area[i][j]==0)
{
printf("No point\n");
return 0;
}
}
}
printf("the index of the point is %d\n",j);
return 0;
}
方法二:
#include<iostream>
using namespace std;
int N;//N表示顶点数,有向图
bool judge(int *area[],int index)
{
int i,j;
for(j=0;j<N;j++)
{
if(area[index][j]==1)
return false;
}
for(i=0;i<N;i++)
{
if(i==index)
continue;
if(area[i][index]==0)
return false;
}
return true;
}
int main()
{
scanf("%d",&N);
int i,j;
int **area=new int*[N];
for(i=0;i<N;i++)
area[i]=new int[N];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&area[i][j]);
}
}
i=0;
j=0;
while(i<N&&j<N)
{
if(area[i][j]==0)
j++;
else
i++;
}
if(judge(area,i))
{
printf("the index of the matrix is %d\n",i);
}
else
{
printf("No point\n");
}
return 0;
}
测试数据:
5
0 0 1 0 1
0 1 0 0 1
1 0 1 0 1
0 1 0 0 1
0 0 0 0 0
5
0 0 0 0 0
1 0 1 0 0
1 0 1 0 0
1 0 1 0 0
1 0 0 0 0