// A C# program to check if a given graph is Eulerian or not 
using System; 
using System.Collections.Generic; 
  
   
// This class represents an undirected graph using adjacency list 
// representation 
public class Graph 
{ 
    private int V;   // No. of vertices 
   
    // Array  of lists for Adjacency List Representation 
    private List<int> []adj; 
   
    // Constructor 
    Graph(int v) 
    { 
        V = v; 
        adj = new List<int>[v]; 
        for (int i=0; i<v; ++i) 
            adj[i] = new List<int>(); 
    } 
   
    //Function to add an edge into the graph 
    void addEdge(int v, int w) 
    { 
        adj[v].Add(w);// Add w to v's list. 
        adj[w].Add(v); //The graph is undirected 
    } 
   
    // A function used by DFS 
    void DFSUtil(int v,bool []visited) 
    { 
        // Mark the current node as visited 
        visited[v] = true; 
   
        // Recur for all the vertices adjacent to this vertex 
        foreach(int i in adj[v]){ 
            int n = i; 
            if (!visited[n]) 
                DFSUtil(n, visited); 
        } 
    } 
   
    // Method to check if all non-zero degree vertices are 
    // connected. It mainly does DFS traversal starting from 
    bool isConnected() 
    { 
        // Mark all the vertices as not visited 
        bool []visited = new bool[V]; 
        int i; 
        for (i = 0; i < V; i++) 
            visited[i] = false; 
   
        // Find a vertex with non-zero degree 
        for (i = 0; i < V; i++) 
            if (adj[i].Count != 0) 
                break; 
   
        // If there are no edges in the graph, return true 
        if (i == V) 
            return true; 
   
        // Start DFS traversal from a vertex with non-zero degree 
        DFSUtil(i, visited); 
   
        // Check if all non-zero degree vertices are visited 
        for (i = 0; i < V; i++) 
           if (visited[i] == false && adj[i].Count > 0) 
                return false; 
   
        return true; 
    } 
   
    /* The function returns one of the following values 
       0 --> If grpah is not Eulerian 
       1 --> If graph has an Euler path (Semi-Eulerian) 
       2 --> If graph has an Euler Circuit (Eulerian)  */
    int isEulerian() 
    { 
        // Check if all non-zero degree vertices are connected 
        if (isConnected() == false) 
            return 0; 
   
        // Count vertices with odd degree 
        int odd = 0; 
        for (int i = 0; i < V; i++) 
            if (adj[i].Count%2!=0) 
                odd++; 
   
        // If count is more than 2, then graph is not Eulerian 
        if (odd > 2) 
            return 0; 
   
        // If odd count is 2, then semi-eulerian. 
        // If odd count is 0, then eulerian 
        // Note that odd count can never be 1 for undirected graph 
        return (odd==2)? 1 : 2; 
    } 
   
    // Function to run test cases 
    void test() 
    { 
        int res = isEulerian(); 
        if (res == 0) 
            Console.WriteLine("graph is not Eulerian"); 
        else if (res == 1) 
            Console.WriteLine("graph has a Euler path"); 
        else
           Console.WriteLine("graph has a Euler cycle"); 
    } 
   
    // Driver method 
    public static void Main(String []args) 
    { 
        // Let us create and test graphs shown in above figures 
        Graph g1 = new Graph(5); 
        g1.addEdge(1, 0); 
        g1.addEdge(0, 2); 
        g1.addEdge(2, 1); 
        g1.addEdge(0, 3); 
        g1.addEdge(3, 4); 
        g1.test(); 
   
        Graph g2 = new Graph(5); 
        g2.addEdge(1, 0); 
        g2.addEdge(0, 2); 
        g2.addEdge(2, 1); 
        g2.addEdge(0, 3); 
        g2.addEdge(3, 4); 
        g2.addEdge(4, 0); 
        g2.test(); 
   
        Graph g3 = new Graph(5); 
        g3.addEdge(1, 0); 
        g3.addEdge(0, 2); 
        g3.addEdge(2, 1); 
        g3.addEdge(0, 3); 
        g3.addEdge(3, 4); 
        g3.addEdge(1, 3); 
        g3.test(); 
   
        // Let us create a graph with 3 vertices 
        // connected in the form of cycle 
        Graph g4 = new Graph(3); 
        g4.addEdge(0, 1); 
        g4.addEdge(1, 2); 
        g4.addEdge(2, 0); 
        g4.test(); 
   
        // Let us create a graph with all veritces 
        // with zero degree 
        Graph g5 = new Graph(3); 
        g5.test(); 
    } 
}  

C Sharp Online Compiler

Write, Run & Share C# code online using OneCompiler's C# online compiler for free. It's one of the robust, feature-rich online compilers for C# language, running on the latest version 8.0. Getting started with the OneCompiler's C# compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C# and start coding.

Read inputs from stdin

OneCompiler's C# online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.

using System;
 
namespace Sample
{
  class Test
    {
      public static void Main(string[] args)
       {
         string name;
         name = Console.ReadLine();
         Console.WriteLine("Hello {0} ", name);
	}
     }
}

About C Sharp

C# is a general purpose object-oriented programming language by Microsoft. Though initially it was developed as part of .net but later it was approved by ECMA and ISO standards.

You can use C# to create variety of applications, like web, windows, mobile, console applications and much more using Visual studio.

Syntax help

Data types

Data TypeDescriptionRangesize
intTo store integers-2,147,483,648 to 2,147,483,6474 bytes
doubleto store large floating point numbers with decimalscan store 15 decimal digits8 bytes
floatto store floating point numbers with decimalscan store upto 7 decimal digits4 bytes
charto store single characters-2 bytes
stringto stores text-2 bytes per character
boolto stores either true or false-1 bit

Variables

Syntax

datatype variable-name = value;

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition or set of few conditions IF-ELSE is used.

if(conditional-expression) {
   // code
} 
else {
   // code
}

You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to If-Else-If ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement) {
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {
 // code 
}

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition);

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

data-type[] array-name;

Methods

Method is a set of statements which gets executed only when they are called. Call the method name in the main function to execute the method.

Syntax

static void method-name() 
{
  // code to be executed
}